在这个给定的字典defaultdict(dict)类型数据中:
说这是dict1
{726: {'X': [3.5, 3.5, 2.0}, 'Y': [2.0, 0.0, 0.0], 'chr': [2, 2, 2]}, 128: {'X': [0.5, 4.0, 4.0], 'Y': [4.0, 3.5, 3.5], 'chr': [3, 3, 3]}}
dict2
是
{726: {'sum_X': [8, 0, 2], 'sum_Y': [3, 2, 0]}, 128: {'sum_X': [0.5, 2, 0], 'sum_Y': [5, 3.5, 3]}}
预期输出:
Union_dict =
{726: {'X': [3.5, 3.5, 2.0}, 'Y': [2.0, 0.0, 0.0], 'chr': [2, 2, 2], 'sum_X': [8, 0, 2], 'sum_Y': [3, 2, 0]}, 128: {'X': [0.5, 4.0, 4.0], 'Y': [4.0, 3.5, 3.5], 'chr': [3, 3, 3], 'sum_X': [0.5, 2, 0], 'sum_Y': [5, 3.5, 3]}}
每个词典都有一个unique key
(即726,128 ......),可以在两个词典中找到(dict1 and dict2
),但不同词典中的每个词都有unique identifier
{{1} }}。我想使用唯一键合并这些词典,但也希望保持列表中值的顺序完整且有序。
我尝试了几种方法,包括list values
解释的How to merge two Python dictionaries in a single expression?中的广泛方法。我尝试使用我所知道的Aaron Hall
来修改方法但是它失败了。
我试过了:
1
dict comprehension
2
union_dict = {k: [dict1[i] for i in v] for k, v in dict2.items()}
3
union_dict = defaultdict(dict)
for a,b in dict1.items(), dict2.items():
union_dict[dict1].append(dict2)
另外,你能否全面解释一下这几种方法,并且保持低内存,因为我的词典会很大。
非常感谢!
答案 0 :(得分:1)
注意:此解决方案将结果返回为dict1
:
for key, value in dict2.items():
for subkey, subvalue in value.items():
dict1[key][subkey] = subvalue
将所有子项追加到dict1
。如果存在冲突(匹配的子密钥,dict1
将被dict2
覆盖。
>>> dict1
{128: {'Y': [4.0, 3.5, 3.5], 'X': [0.5, 4.0, 4.0], 'chr': [3, 3, 3], 'sum_Y': [5, 3.5, 3], 'sum_X': [0.5, 2, 0]},
726: {'Y': [2.0, 0.0, 0.0], 'X': [3.5, 3.5, 2.0], 'chr': [2, 2, 2], 'sum_Y': [3, 2, 0], 'sum_X': [8, 0, 2]}}
如果您想保留dict1
,只需使用copy.deepcopy(),然后添加到该新词典。