繁体   English   中英

如何在具有特定键的列表中查找字典?

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

对于此列表,如果存在键PlatformName ,我想获取列表。 所以我想得到[{'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM