从对生成嵌套字典

Generate nested dictionary from pairs

我有一个输入字典:

d={'AM-tv': 1.2,
  'AM-rs': 1.3,
  'AM-pq': 1.2,
  'BR-MN': 1.3,
  'BR-tN': 1.3,
  'BR-tq': 1.4}

预期输出

d={'AM':{'tv':1.2,'rs':1.3,'pq':1.2},'BR':{'MN':1.3,'tN':1.3,'tq':1.4}

有什么方法可以从成对的输入字典中生成嵌套字典吗?

您可以遍历 items(),这将为您提供 key/value 对,split() 键并分配。 setdefault 在这里有助于在第一次看到外部键时用新的空字典初始化内部字典:

d = {
    'AM-tv': 1.2,
    'AM-rs': 1.3,
    'AM-pq': 1.2,
    'BR-MN': 1.3,
    'BR-tN': 1.3,
    'BR-tq': 1.4
}

new_d = {}

for k, v in d.items():
    k1, k2 = k.split('-')
    new_d.setdefault(k1, {})[k2] = v
    

new_d 将是:

{'AM': {'tv': 1.2, 'rs': 1.3, 'pq': 1.2},
 'BR': {'MN': 1.3, 'tN': 1.3, 'tq': 1.4}}

一种方法是拆分键并使用 dict.setdefault 初始化内部字典:

out = {}
for k,v in d.items():
    o,i = k.split('-')
    out.setdefault(o, {})[i] = v

输出:

{'AM': {'tv': 1.2, 'rs': 1.3, 'pq': 1.2},
 'BR': {'MN': 1.3, 'tN': 1.3, 'tq': 1.4}}