Python嵌套循环问题:list_dic_gen函数实现错误排查与修正
Python函数list_dic_gen实现错误修复
需求说明
- 函数
list_dic_gen接收两个参数:- 第一个参数是字符串类型元素组成的列表;
- 第二个参数是嵌套列表,每个内层列表的长度和第一个参数的列表长度一致。
- 函数返回字典组成的列表:每个字典的key来自第一个参数的列表,value来自第二个参数对应的内层列表,key和value按索引一一对应;字典列表的顺序要和第二个参数的内层列表顺序一致,必须在遍历第二个参数的for循环内创建空字典。
问题代码
def list_dic_gen(lst,lol): acc=[] accd={} a=0 for l in lol: for o in l: accd[lst[a]]=l[a] acc.append(accd) a+=1 return acc
问题现象
调用list_dic_gen(['One','Two'], [['First','Second']])时,返回结果是[{'One': 'First', 'Two': 'Second'}, {'One': 'First', 'Two': 'Second'}],但预期结果是[{'One': 'First', 'Two': 'Second'}],而且代码无法同时兼容单一内层列表和多个内层列表的场景。
错误原因&修复方案
错误点分析
- 字典
accd在循环外创建,每次循环只是修改同一个字典的内容,多次append的都是同一个字典的引用; - 内层循环遍历每个元素时都执行
append,导致一个内层列表会生成多个重复字典; return acc写在了外层循环的第一次迭代里,函数会直接返回,无法处理多个内层列表的情况;- 索引变量
a的全局计数会导致多个内层列表处理时索引混乱。
正确实现
def list_dic_gen(lst, lol): result = [] for inner_list in lol: # 严格遵循要求:在外层循环内创建空字典 current_dict = {} # 按索引配对key和value for idx in range(len(lst)): current_dict[lst[idx]] = inner_list[idx] # 也可以用zip简化写法:current_dict = dict(zip(lst, inner_list)) result.append(current_dict) return result
验证测试
- 测试单一内层列表:
print(list_dic_gen(['One','Two'], [['First','Second']])) # 输出:[{'One': 'First', 'Two': 'Second'}] - 测试多个内层列表:
print(list_dic_gen(['Name','Age'], [['Alice',25], ['Bob',30]])) # 输出:[{'Name': 'Alice', 'Age': 25}, {'Name': 'Bob', 'Age': 30}]
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

