如果我有一本词典,并且我想删除其中的值为空列表的条目[]
我该如何去做这件事?删除没有值的dictonary条目 - Python
我想:
for x in dict2.keys():
if dict2[x] == []:
dict2.keys().remove(x)
,但没有奏效。
如果我有一本词典,并且我想删除其中的值为空列表的条目[]
我该如何去做这件事?删除没有值的dictonary条目 - Python
我想:
for x in dict2.keys():
if dict2[x] == []:
dict2.keys().remove(x)
,但没有奏效。
.keys()
提供访问在字典中的键的清单,但改变它不是(一定)反映在字典中。您需要使用del dictionary[key]
或dictionary.pop(key)
将其删除。
由于某些版本的Python的行为,您需要创建一个密钥列表的副本,以便事情能够正常工作。所以,如果写为您的代码将工作:
for x in list(dict2.keys()):
if dict2[x] == []:
del dict2[x]
for key in [ k for (k,v) in dict2.items() if not v ]:
del dict2[key]
for x in dict2.keys():
if dict2[x] == []:
del dict2[x]
使用.keys()会创建一个新的列表来迭代,从而允许您从原始列表中删除。 好工作 – mklauber 2011-06-10 14:09:42
它不会在Python 3中这样做,这会引发'RuntimeError:迭代期间字典大小发生变化'。 – 2011-06-10 14:37:36
干净的,但它会创建一个字典的副本:Python支持字典内涵的
dict(filter(lambda x: x[1] != [], d.iteritems()))
较新的版本:
dic = {i:j for i,j in dic.items() if j != []}
这些比过滤器或循环更具可读性
随着发电机对象,而不是列表:
a = {'1': [], 'f':[1,2,3]}
dict((data for data in a.iteritems() if data[1]))
为什么不保留那些不为空,让GC删除剩菜?我的意思是:
dict2 = dict([ (k,v) for (k,v) in dict2.items() if v])
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}
你能解释一下你的代码吗? – Bulat 2015-08-21 22:04:32
我们怎样才能做到这一点是在python2.6? – user482963 2017-03-29 14:14:18
不行的,因为你不能迭代过程中更改字典的大小。 – mklauber 2011-06-10 14:08:21
针对Python 2.5/2.6/2.7/3.1进行了更正。 – 2011-06-10 14:24:01
为什么'list'? dict2.keys()已经可迭代 – JBernardo 2011-06-10 14:32:58