从对生成嵌套字典
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}}
我有一个输入字典:
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}}