【问题标题】:Get dictionary contains in list if key and value exists如果键和值存在,则获取字典包含在列表中
【发布时间】:2017-02-28 18:58:54
【问题描述】:

如何在列表中获取完整的字典数据。但首先我需要检查它们是否存在键和值并配对。

test = [{'a': 'hello'  , 'b': 'world', 'c': 1},
        {'a': 'crawler', 'b': 'space', 'c': 5},
        {'a': 'jhon'   , 'b': 'doe'  , 'c': 8}]

当我试图让它像这样有条件时

if any((d['c'] is 8) for d in test):

值是真或假,但我希望结果是像字典一样

{'a': 'jhon', 'b': 'doe', 'c': 8}

和我一样

if any((d['a'] is 'crawler') for d in test):

结果是:

{'a': 'crawler', 'b': 'space', 'c': 5}

提前致谢

【问题讨论】:

    标签: python list if-statement dictionary conditional-statements


    【解决方案1】:

    is 测试身份,而不是相等性,这意味着它比较内存地址而不是这些变量存储的值。因此,它很可能会为相同的值返回 False。您应该改用== 来检查是否相等。

    至于您的问题,您可以使用filter 或在any 上列出推导:

    >>> [dct for dct in data if dct["a"] == "crawler"]
    >>> filter(lambda dct: dct["a"] == "crawler", data)
    

    结果是一个包含匹配字典的列表。如果您认为[0]th 元素仅包含一项,则可以获取它。

    【讨论】:

      【解决方案2】:

      使用理解:

      data = [{'a': 'hello'  , 'b': 'world', 'c': 1},
              {'a': 'crawler', 'b': 'space', 'c': 5},
              {'a': 'jhon'   , 'b': 'doe'  , 'c': 8}]
      
      print([d for d in data if d["c"] == 8])
      # [{'c': 8, 'a': 'jhon', 'b': 'doe'}]
      

      【讨论】:

      • 请将is 更改为==,这个答案将是完美的。 is 用于身份验证
      • 我只是复制了这个问题,做了编辑。
      • @SSj.Luffy 我知道,只是觉得值得注意。随时将其添加到您的答案中,以便OP 可以知道这一点
      猜你喜欢
      • 2022-07-12
      • 2018-08-02
      • 2022-01-05
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      相关资源
      最近更新 更多