基于连接条件的DICT Python连接列表

2024-06-28 20:12:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张单子。我想根据下面的连接条件合并dict

输入:

List1: [{'id': 'value1', 'name': 'value2'}, {'id': 'value3', 'name': 'value4'}, {'id': 'value5', 'name': 'value2'}]

List2: [{'l2id': 'uuuu', 'l2name': 'value2'},{'l2id': 'zzzz', 'l2name': 'value4'}]

如果List1.name == List2.l2name,则连接List1和List2

输出列表:

[{'id': 'value1', 'name': 'value2', 'l2id': 'uuuu'},
 {'id': 'value3', 'name': 'value4', 'l2id': 'zzzz'},
 {'id': 'value5', 'name': 'value2', 'l2id': 'uuuu'}]

Tags: nameid条件单子value1list2list1value2
1条回答
网友
1楼 · 发布于 2024-06-28 20:12:30

您可以执行以下操作:

from collections import defaultdict

d = defaultdict(list)
for dct in List1:
    d[dct["name"]].append(dct)

result = [{**d1, **d2} for d2 in List2 for d1 in d[d2.pop("l2name")]]
# [{'id': 'value1', 'name': 'value2', 'l2id': 'uuuu'}, 
#  {'id': 'value5', 'name': 'value2', 'l2id': 'uuuu'}, 
#  {'id': 'value3', 'name': 'value4', 'l2id': 'zzzz'}]

或者,如果您不想改变现有的指令:

result = [{**d1, "l2id": d2["l2id"]} for d2 in List2 for d1 in d[d2["l2name"]]]

相关问题 更多 >