[英]How to append lists in nested dictionary in Python
I have 2 nested dictionaries:我有 2 个嵌套字典:
grouped1 ={'LabelStat': { 'Carrier': ['1', '1'],
'FormID': ['0201', '0430']},
'McAfee': {'DatDate': 'Not Available',
' DatVersion': 'Not Available'}
}
grouped2 ={'LabelStat': {'Carrier': ['2', '2'],
'FormID': ['10201', '10430']},
'McAfee': {'DatDate': 'Available',
'DatVersion': 'Available',}
}
And I want to append these 2 dictionaries,the output should looks like this:我想 append 这两个字典,output 应该是这样的:
com_grouped = {
'LabelStat': {'Carrier': ['1', '1','2','2'],
'FormID': ['0201', '0430','10201', '10430']}
'McAfee': {'DatDate': ['Not Available','Available']
'DatVersion': ['Not Available','Available']}
}
First tried:第一次尝试:
com_grouped = grouped1.update(grouped2)
print(com_grouped)
And out put is none.输出是没有的。
Then I tired:然后我累了:
com_grouped = grouped1
com_grouped=com_grouped.update(grouped2)
print(com_grouped)
Out put is still none!输出还是没有!
You can use recursion with collections.defaultdict
:您可以将递归与
collections.defaultdict
一起使用:
from collections import defaultdict
import re
def merge(*d):
v = defaultdict(list)
for i in d:
for a, b in i.items():
v[re.sub('^\s+', '', a)].append(b)
return {a:merge(*b) if all(isinstance(j, dict) for j in b)
else [i for j in b for i in (j if isinstance(j, list) else [j])]
for a, b in v.items()}
print(merge(grouped1, grouped2))
Output: Output:
{'LabelStat': {'Carrier': ['1', '1', '2', '2'], 'FormID': ['0201', '0430', '10201', '10430']}, 'McAfee': {'DatDate': ['Not Available', 'Available'], 'DatVersion': ['Not Available', 'Available']}}
You can merge 2 dict with the update()
method:您可以将 2 dict 与
update()
方法合并:
grouped1 = {'LabelStat': {'Carrier': ['1', '1'],
'FormID': ['0201', '0430']},
'McAfee': {'DatDate': 'Not Available',
' DatVersion': 'Not Available'}
}
grouped2 = {'LabelStat': {'Carrier': ['2', '2'],
'FormID': ['10201', '10430']},
'McAfee': {'DatDate': 'Available',
'DatVersion': 'Available', }
}
com_grouped = grouped1
com_grouped.update(grouped2)
Output: Output:
{'LabelStat': {'Carrier': ['2', '2'], 'FormID': ['10201', '10430']}, 'McAfee': {'DatDate': 'Available', 'DatVersion': 'Available'}}
d = {}
d.setdefault("a", []) = 1
d.setdefault("a", []) = 2
d
OUT: {"a":[1, 2]}输出:{"a":[1, 2]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.