ClearWhiteSpace, Need to check if the value is equal to []
Possible Duplicate:
How do you check if list is blank?
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def CleanWhiteSpace(theDict) :
stuff=[]
for key,value in theDict.items():
for d in value:
if value !="":
stuff.append(d)
print d
theDict[key]=stuff
if not value[d]:
print value
stuff=[]
return theDict
print CleanWhiteSpace({'a':['1','2'],'b':['3',' '],'c':[]}) |
你怎么检查C是空白的C是简单等于[]?
好吧,我有一本字典,里面有目录,有些目录什么都不是。我需要遍历字典并删除那些具有空列表值的键。
尽可能清楚。我试过什么?我尝试了多种不同的方法来检查键的值是否等于零。我尝试了value==":语句,我尝试了,len函数来检查该值是否为空,如果value:似乎什么都不起作用,为什么?因为当有人回答时,空列表不会在循环体中执行。
- 我们不是刚刚有了这个问题,还是有什么不同?
- 我们解决了最后一个问题,这是最后一个问题,但它有一个新问题
- @不,我已经解决了这个问题,但是一个叫斯文的家伙正试图把它恢复过来,只是为了让它成为可能的复制品。我问了一个问题,当它被解决时,我把它编辑成了其他的东西。然后再次编辑并创建一个新问题。有人不断地把这两个问题推到一个相同的位置,只是为了给我惹上麻烦。问题的原件都不一样。
- 如果你的问题清楚地表明(1)你的意思,例如"我试过==[]",(2)你试过的时候到底发生了什么,以及(3)你想发生什么是不同的,那么你的问题会更容易回答(并且会得到更少的选票来结束它)。(您的CleanWhiteSpace功能实际上应该做什么?)
- 我认为任何人都不太可能"只是为了让你陷入困境"(他们到底为什么要这样做?)。实际发生的情况是,您的问题被关闭,您试图用一条愤怒的消息删除它的文本。不要那样做。它没有生产力。
- 此外,侮辱mods是获得帮助的一个坏方法。大多数(全部?)通过耐心地回答问题和在相当长的一段时间内进行有益的编辑,So上的mods获得了权利,因此建立了许多善意。侮辱他们只会降低社区帮助你的可能性。好一点。
- 就像我解释的那样,我试图编辑一个已解决的问题,而不是提出另一个问题。当没有人回答的时候,我试着提出一个新问题。所以我的编辑和一个新问题是一样的。然后我删除了编辑过的问题。然后有人打电话给斯文,把第一个问题退回来,不是回到原来的问题,而是回到问题重复的确切位置。他为什么不把它滚回原来的状态,而是重复的状态?只是为了在不好的愿望下工作效率低下。他做了三次之后,我写了一封愤怒的信
- @为什么这个模型总是把我的问题剪得像复制品?他本可以把第一个问题一直推到乞讨的地方。
- @Garethmcaughan我根据你的要求编辑了我的问题
- 终于!既然我们知道你想做什么,我就给你一个解决办法。
- 在我看来,他似乎只是取消了你试图删除问题的更改。如果他注意到你之前编辑了一个已经回答过的问题,让它问一些不同的问题(!!!!)那么他也很可能把这一变化弄得一团糟,但也许他没有注意到。说真的:这里没有人想伤害你,如果你不能相信,那么我担心问题是你的。
- 请将您的函数命名为"我的函数",而不是"我的函数"(PEP8)
编辑:
这个怎么样?
1 2 3 4 5 6
| def CleanWhiteSpace(theDict):
newDict = {}
for key in theDict:
if theDict[key]:
newDict[key] = theDict[key]
return newDict |
请注意,这样可以避免在适当的位置修改theDict,因此如果您需要,只需询问。
检查列表是否为空有两种方法:
1 2 3
| a_list = []
if not a_list:
do something #the if is entered if the list is blank |
或
1 2 3
| a_list = []
if len(a_list)==0:
do something |
这两个片段是等效的。注意,第一个函数的作用是因为a_list的值被隐式转换为布尔值,bool([])的值是False。< /打击>
- 它们不适用于我所拥有的这个特定片段,我不知道为什么
- 在代码中,您在哪里测试空列表?给我们看看代码。
- 就在那里。正在执行代码FORM PRINT语句print cleanwhitespace('A':['1'、'2']、'B':['3'、''、'C':[]
- 可以。。如何删除空格?总之,我找到了一个解决方案+1。
- @站长,现在该工作了
在您的示例中,当处理键c时,key的值将是'c',value的值将是[]的空列表。你可以说,例如,if not value:,来测试这一点。或者,如果你知道它是一个列表而不是其他类型的序列,那么if value==[]。
很难从所写的问题中确定,但是您是否尝试将类似于if d==[]:的东西放入循环中?这不起作用,因为当value是空列表时,循环for d in value:循环遍历空列表的元素,而没有任何元素,所以循环体永远不会被执行。
顺便说一下,代码的其他一些位似乎显示了value及其元素之间的混淆。例如,你写了if value !="",但肯定是d想要在那里测试。那么if not value[d]:是怎么回事?为什么你会期望d是一个合适的东西来索引value?
在代码执行过程中,您还应该更仔细地考虑stuff发生了什么。
- 叹息。谢谢你解释为什么它不起作用。那么,你是如何让它发挥作用的呢?如何从数组中删除字典中的空列表?
- 我不会为您编写代码,而且很可能其他人也不会;这不是堆栈溢出的工作原理。(除此之外,我们所知道的是,这是一种家庭作业,为你解决它会使你更难学习。)你需要更具体地了解你想知道什么。
- 顺便说一句,注意我和chinmay都说过如何正确地做:检查列表是否为空的通常方法是说类似于if not value:的话。如果出于某种原因,这对您不起作用,请向我们展示它是如何失败的,然后也许我们可以提供进一步的帮助。
- 我同意加雷斯的观点。"它们在这个特定的片段中不起作用,我有"没有帮助"。我们无法修复不存在的代码。
- 什么部分令人困惑?加雷斯说,由于变量值是空的,所以空性不会被拉过主循环。如何从字典中删除空列表?你们需要我解释什么?'A':['1'、'2']、'C':[]、'B':['3'、''、'以下是失败的方式。键C的值为"[]"。C键不应该存在。代码已经写好了。只是不起作用
- 找到解决方案,用于尝试+1
1
| theDict = dict( [(k,v) for k,v in theDict.items() if len(v)>0]) |
- 改为theDict = dict( [(k,v) for k,v in theDict.items() if v)。更像是Python。
- @不带[的chinmaykanchi