1

可能重复:
如何检查列表是否为空白?

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是否等于[]?

好的,我有一个字典,里面有列表,其中一些列表是由 NOTHING 组成的。我需要遍历字典并删除那些具有空列表值的键。

尽量清楚。我试过什么?我尝试了多种不同的方法来检查键的值是否等于空。我尝试了 value == "": 语句,我尝试了 len 函数来检查 value 是否为空,我尝试了 if value: nothing 似乎工作,为什么?因为有人回答,空列表不会在循环体中执行

4

3 回答 3

1

在您的示例中,当处理 key 时ckeywill 的值和 will的'c'值是一个空列表。您可以通过说,例如,来测试这一点。或者,如果您知道它是一个列表而不是某种其他类型的序列,.value[]if not value:if value==[]

很难从所写的问题中确定,但是您是否尝试过if d==[]:在循环中的某个地方放置类似的东西?那是行不通的,因为 whenvalue是一个空列表,循环for d in value:正在循环一个空列表的元素,并且没有任何元素,所以循环体永远不会被执行。

顺便说一句,您的代码的其他一些部分似乎显示出value其元素之间的混淆。例如,您编写if value != " "但肯定d是您想在那里进行测试。怎么回事if not value[d]:?为什么你会期望d成为一个合适的索引value

您还应该更仔细地考虑stuff代码执行时会发生什么。

于 2012-06-14T00:16:14.623 回答
1

编辑:

这个怎么样?

def CleanWhiteSpace(theDict):
    newDict = {}
    for key in theDict:
        if theDict[key]:
            newDict[key] = theDict[key]
    return newDict

请注意,这避免theDict了就地修改,因此,如果您需要,请询问。

有两种方法可以检查列表是否为空:

a_list = []
if not a_list:
    do something #the if is entered if the list is blank

或者

a_list = []
if len(a_list)==0:
    do something

这两个片段是等价的。请注意,第一个有效,因为 的值a_list被隐式转换为布尔值并且bool([])is False

于 2012-06-14T00:16:37.930 回答
0
theDict = dict( [(k,v) for k,v in theDict.items() if len(v)>0])
于 2012-06-14T00:44:39.090 回答