过滤字典的值

时间:2014-12-18 01:05:39

标签: python dictionary

我想过滤字典的值。

d1 = {'a': 0, 'b': 0, 'c': 8, 'd': 7}

这样做的pythonic方法是什么?

d={}

for k,v in d1.items():
   if v>0:
      d[k]=v

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

filter(..)

有没有优雅的pythonic方法呢?

2 个答案:

答案 0 :(得分:12)

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

>>> {key: d1[key] for key in d1 if d1[key] > 0}
{'c': 8, 'd': 7}

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

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

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

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

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

答案 1 :(得分:0)

过滤功能方法,以满足您的要求。

def f(x):
    return x[1]>0
d1 = {'a': 0, 'b': 0, 'c': 8, 'd': 7}
filter(f, d1.items())

或者你可以使用lambda函数,这样更简单:

filter(lambda x:x[1]>0, d1.items())