【问题标题】:Filter values of dictionary [duplicate]字典的过滤值[重复]
【发布时间】: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


    【解决方案1】:

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

    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())
    

    【讨论】:

      【解决方案2】:

      您可以使用字典推导式,用过滤后的值创建字典,像这样

      >>> {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}
      

      【讨论】:

        猜你喜欢
        • 2016-08-21
        • 2020-11-04
        • 2018-04-18
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 2020-09-11
        相关资源
        最近更新 更多