Python 3.x 按键合并2个词典而不覆盖

Python 3.x 按键合并2个词典而不覆盖,python-3.x,dictionary,merge,overwrite,Python 3.x,Dictionary,Merge,Overwrite,假设我有两本字典: ss = {'1':{'tier 1': {'valid_detailed': 66, 'valid_approx': 68, 'valid_unmapped': 56, 'valid_total': 288}}} tt = {'1':{'tier 2': {'valid_detailed': 44, 'valid_approx': 33, 'valid_unmapped': 22, 'valid_total': 111}}} 我想将它们合并在一起,但不覆盖键,只在键不同时

假设我有两本字典:

ss = {'1':{'tier 1': {'valid_detailed': 66, 'valid_approx': 68, 'valid_unmapped': 56, 'valid_total': 288}}}
tt = {'1':{'tier 2': {'valid_detailed': 44, 'valid_approx': 33, 'valid_unmapped': 22, 'valid_total': 111}}}
我想将它们合并在一起,但不覆盖键,只在键不同时添加新项。基本上,我想得到这个:

zz = {'1':{'tier 1': {'valid_detailed': 66, 'valid_approx': 68, 'valid_unmapped': 56, 'valid_total': 288}, 'tier 2': {'valid_detailed': 44, 'valid_approx': 33, 'valid_unmapped': 22, 'valid_total': 111}}}
到目前为止,我已经尝试过:

result_dict = {}
  dicts = [ss, tt]
  for d in dicts:
    for k, v in d.items():
      result_dict.setdefault(k, []).extend(v)
它几乎起作用了。我最终得到的不是我想要的:

result_dict
>>>{'tier 1': ['valid_all_row', 'all_all_row', 'valid_all_row', 'all_all_row'],'tier 2': ['valid_all_row', 'all_all_row', 'valid_all_row', 'all_all_row']}
我怎样才能做到这一点

ss = {'tier 1': {'valid_detailed': 66, 'valid_approx': 68, 'valid_unmapped': 56, 'valid_total': 288}}

tt = {'tier 2': {'valid_detailed': 44, 'valid_approx': 33, 'valid_unmapped': 22, 'valid_total': 111}}

zz={}
for i in ss.keys():
    zz[i]=ss[i]

for i in tt.keys():
    zz[i]=tt[i]
结果:

zz={'tier 1': {'valid_detailed': 66,
  'valid_approx': 68,
  'valid_unmapped': 56,
  'valid_total': 288},
 'tier 2': {'valid_detailed': 44,
  'valid_approx': 33,
  'valid_unmapped': 22,
  'valid_total': 111}}

你尝试过什么代码,它是如何缩短的?我添加了到目前为止我尝试过的代码。仅仅做
z={**ss,**tt}
显然也不行。你对
ss
tt
zz
的定义都不是有效的Python。我已经在字典中修复了
使之成为有效的Python。假设
ss
tt
在顶层都有
第3层
,具有不同的内部值。在
zz
中应该结束什么?可以用
zz=ss.copy()
替换第一个循环。