【发布时间】:2014-04-22 22:45:32
【问题描述】:
这段代码:
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 次才能实现。你能推荐一个更优化的方法吗?
【问题讨论】:
-
你需要
and,而不是or。 -
我认为您的意思是在您的论点之间使用 AND。 “如果 v 不是 '' 或 v != {}”始终为真!但是,"if v" 将为 '' 和 {} 返回 False,因此最有效的是第二个示例中的最后一个。
-
谢谢,我不知道我是怎么错过的。