这段代码:
a = {'sd':{},'sdd':'','sadfas':None,'sadfa':'dsf'}
a = dict((k, v) for k, v in a.iteritems() if v is not '' or v != {} or v is not None)
print a
打印:
{'sdd': '', 'sadfas': None, 'sadfa': 'dsf', 'sd': {}}
但是,它不会从 dict 中删除我需要删除的所有类型的值。这是为什么?
如果我这样做,这些值将被删除:
a = {'sd':{},'sdd':'','sadfas':None,'sadfa':'dsf'}
a=dict((k, v) for k, v in a.iteritems() if v is not '')
a=dict((k, v) for k, v in a.iteritems() if v is not None)
a=dict((k, v) for k, v in a.iteritems() if v)
print a
打印:
{'sadfa': 'dsf'}
这就是我们想要的,但我必须迭代字典 3 次才能实现。您能建议一个更优化的方法吗?
最佳答案
这里有两个问题:
v 不是 ''
应该是v != ''
。您应该始终使用==
和!=
来比较两个值,因为is
和is not
用于比较两个对象的身份。您需要使用
and
而不是or
。否则,这种情况:v != '' or v != {} or v is not None
始终为
True
,因为v
始终不等于''
或不等于{}
.
下面是代码的固定版本:
>>> a = {'sd':{},'sdd':'','sadfas':None,'sadfa':'dsf'}
>>> a = dict((k, v) for k, v in a.iteritems() if v != '' and v != {} and v is not None)
>>> a
{'sadfa': 'dsf'}
>>>
<小时/>
但是,我们可以进一步简化:
>>> a = {'sd':{},'sdd':'','sadfas':None,'sadfa':'dsf'}
>>> a = dict((k, v) for k, v in a.iteritems() if v)
>>> a
{'sadfa': 'dsf'}
>>>
此解决方案之所以有效,是因为 ''
、{}
和 None
的计算结果全部为 False
。
关于python - 从Python中的字典中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23231649/