python - 从Python中的字典中删除值

标签 python logic

这段代码:

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 次才能实现。您能建议一个更优化的方法吗?

最佳答案

这里有两个问题:

  1. v 不是 '' 应该是 v != ''。您应该始终使用 ==!= 来比较两个值,因为 isis not 用于比较两个对象的身份

  2. 您需要使用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/

相关文章:

javascript - 使用递归组合字母

python - 使用 "-"合并数字 (python)

mysql - 如何在mysql中添加列值

azure - 将所有 API 结果提取到单个 CSV 文件 Azure 数据工厂

python - 在 VS Code 终端中运行 python 代码遇到无效语法

c# - 确定变量是否等于 'list' 值中的值的最简洁方法

algorithm - 使用增量、循环、赋值、零进行除法运算

python - 网页抓取返回标签

python - 使用gevent并行ping

python - 如何以与 pip 安装模块相同的方式导入自定义模块?