如果键和值存在,则获取字典包含在列表中

时间:2016-10-19 08:40:08

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

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

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

值为True或False,但我希望结果为

之类的字典
{'a': 'jhon', 'b': 'doe', 'c': 8}

就像我一样

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

结果是:

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

提前致谢

2 个答案:

答案 0 :(得分:2)

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

至于您的问题,您可以使用filter或列出any的列表推理:

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

结果是包含匹配词典的列表。如果您认为它只包含一个项目,则可以获得[0]元素。

答案 1 :(得分:1)

使用理解:

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'}]