[英]How to find a dict in a list with a particular key?
我有一个带有字典的列表列表,如下所示:
[{'key': 'Platform', 'value': 'Test'}, {'key': 'Name', 'value': 'Test1'}, {'key': 'APICall', 'value': 'post'}]
[{'key': 'Platform', 'value': 'Test1'}, {'key': 'APICall', 'value': 'Get'}]
[{'key': 'Platform', 'value': 'Test2'}, {'key': 'Name', 'value': 'Test2'}, {'key': 'APICall', 'value': 'post'}]
对于此列表,如果存在键Platform
和Name
,我想获取列表。 所以我想得到[{'key': 'Platform', 'value': 'Test'}, {'key': 'Name', 'value': 'Test1'}, {'key': 'APICall', 'value': 'post'}]
和[{'key': 'Platform', 'value': 'Test2'}, {'key': 'Name', 'value': 'Test2'}, {'key': 'APICall', 'value': 'post'}]
我不知道如何以一种最有效的方式实现这一目标? 我做了一个非常简单的方法,但在未来,如果列表数量增加,那么可能需要更长的时间。 有没有简单有效的方法来实现这一目标?
for arr_keys in arr:
if arr_keys['key'] == "Platform":
platform = arr_keys['value']
if arr_keys['key'] == "Name":
Name = arr_keys['value']
因此,对于每个列表,您要检查所有键(平台和名称)是否出现在任何字典中。 这直接转化为:
lists = [[{'key': 'Platform', 'value': 'Test'}, {'key': 'Name', 'value': 'Test1'}, {'key': 'APICall', 'value': 'post'}],
[{'key': 'Platform', 'value': 'Test1'}, {'key': 'APICall', 'value': 'Get'}],
[{'key': 'Platform', 'value': 'Test2'}, {'key': 'Name', 'value': 'Test2'}, {'key': 'APICall', 'value': 'post'}]]
for obj in lists:
if all(any(d["key"] == key for d in obj) for key in ("Platform", "Name")):
print(obj)
然而,这将遍历每个键的字典。 要一次性完成 dicts,可以使用defaultdict
进行这样的操作:
from collections import defaultdict
keys = ("Platform", "Name")
for obj in lists:
seen = defaultdict(bool)
for d in obj:
seen[d["key"]] = True
if all(seen[key] for key in keys):
print(obj)
您可以在不更改输入格式的情况下进行的唯一改进是在遇到“平台”和“名称”键时跳出循环。
platform = None
name = None
for arr_keys in arr:
if arr_keys['key'] == "Platform":
platform = arr_keys['value']
if arr_keys['key'] == "Name":
name = arr_keys['value']
if platform is not None and name is not None:
print(arr)
break
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.