如果我有字典,并且我想删除值为空列表[]
的条目,我将如何去做?
我试过了:
for x in dict2.keys():
if dict2[x] == []:
dict2.keys().remove(x)
但这没效果。
答案 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}