Python迭代和创建一个嵌套字典



我有一些数据是在下面的格式(mylist),我试图将其转换成一个嵌套的字典,但努力获得正确的格式。我尝试了几种迭代和转换的变体,但都没有得到想要的结果。我可以得到一些帮助获得所需的格式的数据,如所示的预期结果使用mylist中的数据格式?

mylist = [
[('floor', 'first_floor'), ('bed_room', 'room1'), ('windows', 2), ('color', 'violet')],
[('floor', 'second_floor'), ('bed_room', 'room2'), ('windows', 4), ('color', 'violet')],
]
nest_keys = ['floor', 'bedroom']
cmd_tree = {}
for i in mylist:
last_element = True
for key in reversed(nest_keys):
if last_element is True:
cmd_tree = {key: dict([x for x in i if x[0] not in nest_keys])}
last_element = False
else:
cmd_tree = {key: cmd_tree}
print(cmd_tree)

当前结果:

{'floor': {'bedroom': {'bed_room': 'room2', 'windows': 4, 'color': 'violet'}}}

期望结果:

{'floor': {'first_floor': {'bed_room': {'room1': {'color': 'white',
'windows': 2}}},
'second_floor': {'bed_room': {'room2': {'color': 'violet',
'windows': 4}}}}}

不需要反向循环,循环遍历列表,每次初始迭代都是一个楼层,然后循环遍历它的内容以创建楼层的详细信息:

result = {}
br = 'bed_room'
for (_, floor_name), *details in mylist:
result[floor_name] = {br: {}}

for name, detail in details:
if name == br:
room = detail
result[floor_name][br][room] = {}
else:
result[floor_name][br][room][name] = detail
print({'floor': result})

{'floor': {'first_floor': {'bed_room': {'room1': {'color': 'violet',
'windows': 2}}},
'second_floor': {'bed_room': {'room2': {'color': 'violet',
'windows': 4}}}}}

最新更新