【问题标题】:How to filter dictionary inside a list by its value matching a condition?如何通过匹配条件的值过滤列表中的字典?
【发布时间】:2018-05-10 11:21:10
【问题描述】:

我的代码如下

result = [{"origin_location":'original', 'service':'amazon'},
          {'origin_location':'duplicate', 'service':'flipkart'}]

我想要的是结果

[{'origin_location':'duplicate', 'service':'flipkart'}]

即,仅获取服务为 Flipkart 的列表项。

我已经尝试了我的代码如下

result = filter(lambda x: (line['service'] for line in result) == 'flipkart', result)
print ("Result= ", result)

但它只显示 []。如何更正我的代码以获得正确的输出? 提前致谢。

【问题讨论】:

    标签: python python-3.x dictionary lambda filter


    【解决方案1】:

    您可以使用列表推导来仅保留具有此条件的项目

    >>> result = [i for i in result if i.get('service') == 'flipkart']
    >>> result
    [{'origin_location': 'duplicate', 'service': 'flipkart'}]
    

    【讨论】:

      【解决方案2】:

      filter 在一个iterable 上工作。在 Python 2.7 中,它将返回一个列表,而在 Python 3.x 中,您有一个可以包装成 list 的可迭代对象。

      因此,例如,您不需要在 filter 语句中使用 for 循环:

      lst = [{'origin_location':'original', 'service':'amazon'},
             {'origin_location':'duplicate', 'service':'flipkart'}]
      
      result = list(filter(lambda x: x['service'] == 'flipkart', lst))
      
      print("Result= ", result)
      
      # Result=  [{'origin_location': 'duplicate', 'service': 'flipkart'}]
      

      lambda 函数应用于lst 中的每个元素;如果它返回False,则该元素被“过滤”掉。

      请注意,通过列表推导可以更有效地实现逻辑:

      result = [i for i in lst if i['service'] == 'flipkart']
      

      如果您需要复制 filter 的惰性,请改用生成器表达式 (...)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-27
        相关资源
        最近更新 更多