我有两个词典列表,如下面的示例所示
list1=[
{
"pdpData":{
"a":1,
"b":2
}
}
]
list2=[
{
"pdpData":{
"a":1,
"c":3
}
},
{
"pdpData":{
"a":2,
"b":3
}
}
]
我希望结果如下面的格式所示
list3=[
{
"pdpData":{
"a":1,
"b":2,
"c":3
}
},
{
"pdpData":{
"a":2,
"b":3
}
}
]
list1和list2的大小可以是10000。 List3将是list1和list2的并集。什么是解决这个问题的最好的pythonic解决方案。
答案 0 :(得分:1)
你没有写任何代码,所以我不会写一个完整的解决方案。您需要zip_longest
和dict merging。
from itertools import zip_longest
list1=[
{
"pdpData":{
"a":1,
"b":2
}
}
]
list2=[
{
"pdpData":{
"a":1,
"c":3
}
},
{
"pdpData":{
"a":2,
"b":3
}
}
]
for d1, d2 in zip_longest(list1, list2):
dd1 = d1.get("pdpData", {}) if d1 else {}
dd2 = d2.get("pdpData", {}) if d2 else {}
print({**dd1, **dd2})
输出:
{'a': 1, 'b': 2, 'c': 3}
{'a': 2, 'b': 3}
现在你已经合并了内部词,你需要做的就是将它们打包到另一个dict
作为键,"pdpData"
作为键,并将这些词组打包成一个列表。
答案 1 :(得分:0)
from collections import defaultdict
d = defaultdict(dict)
for l in (l1, l2):
for elem in l:
d[elem['pdpData']['a']].update(elem['pdpData'])
l3 = d.values()
print(l3)
输出
dict_values([{'a': 1, 'b': 2, 'c': 3}, {'a': 2, 'b': 3}])