删除没有值的字典条目 - Python

时间:2011-06-10 14:00:19

标签: python dictionary

如果我有字典,并且我想删除值为空列表[]的条目,我将如何去做?

我试过了:

for x in dict2.keys():
    if dict2[x] == []:
        dict2.keys().remove(x)

但这没效果。

8 个答案:

答案 0 :(得分:12)

.keys()提供对字典中键列表的访问,但对它的更改不一定(必然)反映在字典中。您需要使用del dictionary[key]dictionary.pop(key)将其删除。

由于某些版本的Python中的行为,您需要创建一个密钥列表的副本,以便正常工作。因此,如果编写为:

,您的代码将起作用
for x in list(dict2.keys()):
    if dict2[x] == []:
        del dict2[x]

答案 1 :(得分:10)

较新版本的python支持dict comprehensions:

dic = {i:j for i,j in dic.items() if j != []}

这些比filter或for循环更可读

答案 2 :(得分:3)

for x in dict2.keys():
    if dict2[x] == []:
        del dict2[x]

答案 3 :(得分:2)

为什么不保留那些非空的并让gc删除剩余的?我的意思是:

dict2 = dict( [ (k,v) for (k,v) in dict2.items() if v] )

答案 4 :(得分:1)

for key in [ k for (k,v) in dict2.items() if not v ]:
  del dict2[key]

答案 5 :(得分:1)

清理一个,但它会创建该字典的副本:

dict(filter(lambda x: x[1] != [], d.iteritems()))

答案 6 :(得分:1)

使用生成器对象而不是列表:

a = {'1': [], 'f':[1,2,3]}
dict((data for data in a.iteritems() if data[1]))

答案 7 :(得分:0)

def dict_without_empty_values(d):
    return {k:v for k,v in d.iteritems() if v}


# Ex;
dict1 = {
    'Q': 1,
    'P': 0,
    'S': None,
    'R': 0,
    'T': '',
    'W': [],
    'V': {},
    'Y': None,
    'X': None,
}

print dict1
# {'Q': 1, 'P': 0, 'S': None, 'R': 0, 'T': '', 'W': [], 'V': {}, 'Y': None, 'X': None}

print dict_without_empty_values(dict1)
# {'Q': 1}