【发布时间】:2021-01-05 19:59:39
【问题描述】:
我正在尝试根据条件l1.name = l2.name 对 2 个字典 l1 和 l2 列表进行左连接。如果条件匹配,则将 l2 dict 中的附加键添加到 l1 dict,否则 l1 dict 保持原样。
输入
l1 =[{'id': 'id1', 'name': 'value1'}, {'id': 'id2', 'name': 'value2'}, {'id': 'id3', 'name': 'value3'}]
l2 =[{'key': 'key1', 'name': 'value1'},{'key': 'key2', 'name': 'value9'}]
预期输出
result = [{'id': 'id1', 'name': 'value1', 'key': 'key1'}, {'id': 'id2', 'name': 'value2'}, {'id': 'id3', 'name': 'value3'}]
到目前为止的代码只产生匹配的条目。我需要按原样添加来自 l1 的不匹配的字典。
from collections import defaultdict
d = defaultdict(list)
for dct in l1:
d[dct["name"]].append(dct)
result = [{**d1, **d2} for d2 in l2 for d1 in d[d2.pop("l2name")]]
【问题讨论】:
-
遍历
l2中的所有内容,如果不存在则添加到l1。这是微不足道的。 -
我认为您没有正确阅读/理解这个问题。我不需要合并列表。我需要加入每个列表的字典中的元素...为清楚起见,请查看预期的输出。
标签: python python-3.x list dictionary join