![](/img/trans.png)
[英]Merge two dictionary values to one and add it to another dictionary in Python
[英]Merge 3 dictionary to one in python
将 3 个字典合并为一个。 每个 id 都有一个共同的元素( id
)
d1 低于
[{
"id": 1,
"title": "delectus aut autem"
},
{
"id": 2,
"title": "quis ut nam facilis et officia qui"
}]
d2
[{
"id": 1,
"Level":"Gold"
},
{
"id": 2,
"Level":"Silver"
}]
d3
[{
"id": 1,
"completed": false
},
{
"id": 2,
"completed": true
}]
预计出局
[
{
"id": 1,
"title": "delectus aut autem",
"Level":"Gold",
"completed": false
},
{
"id": 2,
"title": "quis ut nam facilis et officia qui",
"Level":"Silver"
"completed": true
]
这是使用列表理解的一种方法:
[{**a, **b, **c} for a, b, c in zip(d1, d2, d3)]
output 是:
[{'id': 1, 'title': 'delectus aut autem', 'Level': 'Gold', 'completed': False},
{'id': 2,
'title': 'quis ut nam facilis et officia qui',
'Level': 'Silver',
'completed': True}]
请注意,这假定所有三个列表:
l3 = sorted(l3, key=lambda x:x["id"])
。这是 pandas 的做法,使用DataFrame.merge
import pandas as pd
print(
pd.DataFrame(df1).merge(pd.DataFrame(df2), on=['id'])
.merge(pd.DataFrame(df3), on=['id'])
.to_dict(orient='records')
)
[{'id': 1, 'title': 'delectus aut autem', 'Level': 'Gold', 'completed': False},
{'id': 2, 'title': 'quis ut nam facilis et officia qui', 'Level': 'Silver', 'completed': False}]
这将适用于已排序/未排序的列表。
import itertools
from collections import defaultdict
merged_dict = defaultdict(dict)
for d in itertools.chain(d1, d2, d3):
merged_dict[d["id"]].update(d)
final_list = list(merged_dict.values())
print(final_list)
Output:
[
{
"id": 1,
"title": "delectus aut autem",
"Level": "Gold",
"completed": False
},
{
"id": 2,
"title": "quis ut nam facilis et officia qui",
"Level": "Silver",
"completed": True,
}
]
合并3个字典
d = [] # merged dictionary
for (dict1, dict2, dict3) in zip(d1, d2, d3):
k = 'id' # matching key
if (dict1[k] == dict2[k] == dict3[k]):
del dict2[k], dict3[k] # deleting common element from 2nd and 3rd
dict1.update(dict2) # merge 2nd in 1st
dict1.update(dict3) # merge 3rd in 1st
d.append(dict(dict1)) # adding in array
print (d)
output:
[{'id': 1, 'title': 'delectus aut autem', 'Level': 'Gold', 'completed': False}, {'id': 2, 'title': 'quis ut nam facilis et office qui', 'Level': 'Silver', '完成': True}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.