Python如何创建由互不相同的独立字典构成的列表
问题描述
需要创建元素为字典的列表,初始实现代码运行后输出不符合预期。
原实现代码:
list = ['Frank','John', 'Mitchel','Melania','Samson','scophield'] dict = [] for i in list: name = {} for i in list: name["First_name"]= i dict.append(name) print(dict)
实际运行输出:
[{'First_name': 'scophield'}, {'First_name': 'scophield'}, {'First_name': 'scophield'}, {'First_name': 'scophield'}, {'First_name': 'scophield'}, {'First_name': 'scophield'}]
预期输出:
[{'First_name': 'Frank'}, {'First_name': 'John'}, {'First_name': 'Mitchel'}, {'First_name': 'Melania'}, {'First_name': 'Samson'}, {'First_name': 'scophield'}]
错误原因
- 存在多余的内层嵌套循环:外层循环已经在逐个遍历姓名列表的元素,内层又完整遍历了一次整个列表,每次遍历都会覆盖
name字典中First_name的值,内层循环结束后该值固定为列表最后一个元素scophield,最终所有字典的取值都是这个值。 - 变量命名不规范:使用
list、dict作为变量名会覆盖Python内置的列表、字典类型,后续调用相关内置方法时容易触发异常。
修改方法
删除冗余的内层循环即可,修正后的可运行代码:
name_list = ['Frank','John', 'Mitchel','Melania','Samson','scophield'] result = [] for name_str in name_list: name = {"First_name": name_str} result.append(name) print(result)
如果追求更简洁的写法,也可以用列表推导式实现,逻辑完全一致:
name_list = ['Frank','John', 'Mitchel','Melania','Samson','scophield'] result = [{"First_name": name} for name in name_list] print(result)
运行上述任意一段代码,都能得到预期的输出结果。
内容的提问来源于stack exchange,提问作者Mensart
相关产品推荐
相关产品推荐

