Python二维列表转字典时如何避免值嵌套多层列表
二维列表转字典的value嵌套问题修复方案
问题根源
你代码出现多层嵌套的核心原因是:遇到重复key时,直接将旧value和新值打包成了新的嵌套列表再赋值,每触发一次重复key就会多套一层,最终就会出现多层嵌套的结果。
修正后的实现代码
def make_dict_from_csv(test_list): """将二维列表转为字典,首个元素为key,剩余元素作为value项追加到对应key的列表中""" budget_dict = {} # 跳过表头直接遍历数据行 for item in test_list[1:]: key = item[0] current_row_value = item[1:] # 新key先初始化空列表 if key not in budget_dict: budget_dict[key] = [] # 直接追加当前行的剩余元素,避免嵌套 budget_dict[key].append(current_row_value) return budget_dict # 测试调用 budget_dict = make_dict_from_csv(test_list) print(budget_dict)
逻辑说明
- 移除了原代码中冗余的索引计数、临时key、遍历字典匹配key等操作,直接遍历每行数据即可
- 统一使用
append方法追加新数据,从逻辑上完全避免嵌套生成 - 直接通过切片跳过表头行,不需要后续单独删除表头key,代码更简洁
运行后输出的结果完全符合你需要的扁平化结构:{'Clothes': [['Socks', 'Wool', '5'], ['Shorts', 'Cotton', '5'], ['Trousers', 'Cotton', '15']], 'Education': [['Books', 'Rymans', '10'], ['Pens', 'Rymans', '12'], ['Pencils', 'Rymans', '4'], ['Paper', 'WH Smths', '3.5'], ['computer', 'PC World', '800']], 'Entertainment': [['Kindle Unlimited', 'DD', '7.99'], ['Audible', 'On hold', '7'], ['Spotify', 'DD', '11.99'], ['Netflix', 'DD', '9']]}
内容的提问来源于stack exchange,提问作者milesabc123
相关产品推荐
相关产品推荐

