繁体   English   中英

将一个字典作为值添加到另一个具有相同键的字典中

[英]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]}}

注意: defaultdictdict的子类,因此它充当普通字典。 为方便起见,我刚刚打印了两个带有 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM