如何在列表中获取完整的字典数据。但首先我需要检查它们是否存在密钥和值并配对。
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}
提前致谢
答案 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'}]