我有一个扁平的字典,我想把它做成一个嵌套的字典flat = {'X_a_one': 10,
'X_a_two': 20,
'X_b_one': 10,
'X_b_two': 20,
'Y_a_one': 10,
'Y_a_two': 20,
'Y_b_one': 10,
'Y_b_two': 20}
我想把它转换成表格
^{pr2}$
平面词典的结构是这样的,不应该有任何歧义的问题。我希望它适用于任意深度的字典,但性能并不是真正的问题。我见过很多方法可以扁平化嵌套字典,但基本上没有一种方法用于嵌套扁平化字典。字典中存储的值要么是标量,要么是字符串,永远不可编辑。在
到目前为止,我有一些可以接受输入的东西test_dict = {'X_a_one': '10',
'X_b_one': '10',
'X_c_one': '10'}
到输出端test_out = {'X': {'a_one': '10',
'b_one': '10',
'c_one': '10'}}
使用代码def nest_once(inp_dict):
out = {}
if isinstance(inp_dict, dict):
for key, val in inp_dict.items():
if '_' in key:
head, tail = key.split('_', 1)
if head not in out.keys():
out[head] = {tail: val}
else:
out[head].update({tail: val})
else:
out[key] = val
return out
test_out = nest_once(test_dict)
但是我很难弄清楚如何把它变成递归地创建字典的所有级别的东西。在
任何帮助都将不胜感激!在
(至于我为什么要这样做:我有一个结构相当于嵌套dict的文件,我想把这个文件的内容存储在NetCDF文件的attributes字典中,以后再检索它。但是NetCDF只允许您将平面字典作为属性,所以我想取消对先前存储在NetCDF文件中的字典的格式化。)