Python迭代创建嵌套字典:实现列表数据到目标嵌套结构的转换
Python列表转指定结构嵌套字典实现
问题说明
你现有输入数据与原有代码如下:
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)
原有代码运行后只保留了最后一条数据的结构,无法生成多楼层的嵌套字典,同时存在nest_keys中bedroom拼写与实际数据键bed_room不匹配的问题。
修复后实现代码
mylist = [ [('floor', 'first_floor'), ('bed_room', 'room1'), ('windows', 2), ('color', 'violet')], [('floor', 'second_floor'), ('bed_room', 'room2'), ('windows', 4), ('color', 'violet')], ] cmd_tree = {} for item in mylist: # 将当前行元组转为字典方便提取字段 row = dict(item) # 提取嵌套层级的字段值,同时从属性中移除 floor_val = row.pop('floor') bedroom_val = row.pop('bed_room') # 逐层初始化和赋值,避免覆盖历史数据 if floor_val not in cmd_tree: cmd_tree[floor_val] = {} cmd_tree[floor_val]['bed_room'] = { bedroom_val: row } # 外层嵌套floor键符合预期结构 final_result = {'floor': cmd_tree} print(final_result)
输出结果
{ 'floor': { 'first_floor': { 'bed_room': { 'room1': {'windows': 2, 'color': 'violet'} } }, 'second_floor': { 'bed_room': { 'room2': {'windows': 4, 'color': 'violet'} } } } }
注:你给出的预期结果中room1的color值为white属于笔误,上述结果以原始输入数据中的violet为准
内容的提问来源于stack exchange,提问作者MBasith
相关产品推荐
相关产品推荐

