我有一本类似以下的字典-
parent_key : {child : 1, child :2}
我还有另一本格式相同的字典-
parent_key : {child : 3, child :2}
两者具有相同的父键和相同的子键。我需要获得如下输出-
parent_key : {{child : 1, child :2},{child : 3, child :2}}
如果我使用update()方法,它将仅使用最新值更新密钥,但我需要使用指定的格式。请帮忙!
答案 0 :(得分:1)
您的输出表示一组词典:
parent_key : {{child : 1, child :2},{child : 3, child :2}}
这是无效的。我还假设这些键实际上不是重复的键,而您只是将每个键替换为child
。否则,最终结果将更加无效,因为字典不能有重复的键。
相反,我建议改为创建此结构:
{parent_key : [{child1 : 1, child2 :2}, {child1 : 3, child2 :2}]}
哪一个将每个内部子词典收集到一个列表中,该列表似乎与您要实现的目标最接近。
演示:
from collections import defaultdict
d1 = {"a": {"b": 1, "c": 2}}
d2 = {"a": {"b": 3, "c": 2}}
final_d = defaultdict(list)
for d in (d1, d2):
for k, v in d.items():
final_d[k].append(v)
print(final_d)
# defaultdict(<class 'list'>, {'a': [{'b': 1, 'c': 2}, {'b': 3, 'c': 2}]})
print(dict(d))
# {'a': [{'b': 1, 'c': 2}, {'b': 3, 'c': 2}]}
以上内容使用列表的collections.defaultdict
将字典聚合为一个列表。
您还可以这样实现嵌套字典结果:
{parent_key : {child1: [1, 3], child2: [2, 2]}}
演示:
from collections import defaultdict
d1 = {"a": {"b": 1, "c": 2}}
d2 = {"a": {"b": 3, "c": 2}}
final_d = defaultdict(lambda: defaultdict(list))
for d in (d1, d2):
for k1, v1 in d.items():
for k2, v2 in v1.items():
final_d[k1][k2].append(v2)
print(final_d)
# {'a': defaultdict(<class 'list'>, {'b': [1, 3], 'c': [2, 2]})}
print({k: dict(v) for k, v in final_d.items()})
# {'a': {'b': [1, 3], 'c': [2, 2]}}
注意::defaultdict
是dict
的子类,因此它充当普通词典。我刚刚打印了两个带有defaultdict的版本,为了方便起见。
答案 1 :(得分:0)
您可以这样做:
AddDefaultIdentity