过滤字典的值

use*_*649 5 python dictionary

我想过滤字典的价值.

d1 = {'a': 0, 'b': 0, 'c': 8, 'd': 7}
Run Code Online (Sandbox Code Playgroud)

什么是pythonic方式来做到这一点.

d={}

for k,v in d1.items():
   if v>0:
      d[k]=v
Run Code Online (Sandbox Code Playgroud)

我无法使用过滤器来获得相同的重新连接.

filter(..)
Run Code Online (Sandbox Code Playgroud)

有没有优雅的pythonic方式呢?

the*_*eye 12

您可以使用字典理解来创建包含过滤值的字典,如下所示

>>> {key: d1[key] for key in d1 if d1[key] > 0}
{'c': 8, 'd': 7}
Run Code Online (Sandbox Code Playgroud)

你也可以dict.items()这样使用

>>> {key: value for key, value in d1.items() if value > 0}
{'c': 8, 'd': 7}
Run Code Online (Sandbox Code Playgroud)

注意:dict.iteritems()在Python 2.7中使用将提高内存效率,因为dict.items()它将创建一个包含所有键值对的元组列表.

如果您打算只删除那些值0,那么您甚至可以像这样缩短它

>>> {key: value for key, value in d1.items() if value}
{'c': 8, 'd': 7}
Run Code Online (Sandbox Code Playgroud)