You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:06:05