![](/img/trans.png)
[英]python dictionary key pointing to value of another key in the same dictionary
[英]Add a dictionary as a value to another dictionary with the same key
我有一本像下面这样的字典 -
parent_key : {child : 1, child :2}
我有另一本格式相同的字典 -
parent_key : {child : 3, child :2}
两者都有相同的父键和相同的子键。我需要得到如下输出 -
parent_key : {{child : 1, child :2},{child : 3, child :2}}
如果我使用 update() 方法,它只是用最新的值更新键,但我需要以我指定的格式。 请帮助!
您的输出代表一组字典:
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 和不带有的版本。
你可以这样做:
dic_arr = [{'a' : 2, 'b' : 4, 'c' : 6},
{'a' : 5, 'b' : 7, 'c' : 8},
{'d' : 10}]
res = {}
for sub in dic_arr:
for key, val in sub.items():
res.setdefault(key, []).append(val)
print(str(res))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.