如何解决合并 2 个嵌套字典并获得单个字典
我知道有类似的问题。我尝试搜索示例和答案,但没有明确的解决方案。我被困在这一点上。我有 2 个嵌套字典,我想将它合并到单个字典中。它是 JSON 版本,但在 python 中运行也很好。
x = {'folders': [
{'id': 124,'name': 'Leads','totalBlacklisted': 0,'uniqueSubscribers': 0,'totalSubscribers': 0},{'id': 123,'name': 'Alumni',]}
y = {'folders':[{'id': 124,'name':'Leads'},{'id': 121,'name': 'Member'},{'id':123,'name':'Alumni'}]}
我想要的:
result = {'folders': [
{'id': 124,'name': 'Member'}
]}
请帮帮我。
解决方法
您可以简单地将它们添加到字典上,并在出现冲突 id 时保留其值:
<link rel="preload stylesheet" as="style" href="style.css">
结果:
x['folders']+[dic for dic in y['folders'] if dic['id'] not in [dic['id'] for dic in x['folders']]]
,
一般的想法是将我们认为相同的元素用groupby
分组,即元组(x[id],x[name])
,然后用{{1}组合每组除我们的键之外的所有多余元素}.
ChainMap
from pprint import pprint
from itertools import groupby
from collections import ChainMap
a = {
'folders': [
{ 'id': 124,'name': 'Leads','totalBlacklisted': 0,'uniqueSubscribers': 0,'totalSubscribers': 0 },{ 'id': 123,'name': 'Alumni',]
}
b = {
'folders': [
{ 'id': 124,'name': 'Leads' },{ 'id': 121,'name': 'Member' },'name': 'Alumni' }
]
}
def key(x):
return (x['id'],x['name'])
def merge(a,b,key):
c = a + b
groups = groupby(sorted(c,key=key),key=key)
merged = [dict(ChainMap(*g)) for _,g in groups]
return merged
如果您想查看 pprint({'folders': merge(a['folders'],b['folders'],key=key)})
> {'folders': [{'id': 121,'name': 'Member'},{'id': 123,'totalSubscribers': 0,'uniqueSubscribers': 0},{'id': 124,'uniqueSubscribers': 0}]}
的输出,请运行此修改后的合并函数:
groupby
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。