【发布时间】:2015-02-16 17:03:29
【问题描述】:
我想过滤字典的值。
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方式来做到这一点?
【问题讨论】:
标签: 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方式来做到这一点?
【问题讨论】:
标签: python dictionary
过滤功能方法来满足您的要求。
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())
【讨论】:
您可以使用字典推导式,用过滤后的值创建字典,像这样
>>> {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}
注意:在 Python 2.7 中使用dict.iteritems() 将更节省内存,因为dict.items() 将创建一个包含所有键值对的元组列表。
如果您的意图只是删除 0 的值,那么您甚至可以像这样缩短它
>>> {key: value for key, value in d1.items() if value}
{'c': 8, 'd': 7}
【讨论】: