如何创建字典列表:同一键依次关联另一列表的各元素
解决字典列表创建的问题
嘿,我来帮你搞定这个问题!你当前代码里的问题很明确——循环的时候每次都把整个ids列表和field做配对,而不是用当前迭代的单个值。咱们一步步拆解并修正:
问题根源分析
你写的循环里,[i for i in ids]会生成完整的[8,9,10,11,12]列表。每次执行zip(field, 这个列表)时,因为field只有一个元素'person',zip只会取到第一对('person', 8),然后循环重复五次,自然每个字典都是{'person':8}了。
几种可行的解决方案
方案1:修改现有循环(最直观)
直接把循环里的配对对象换成当前迭代的i,而不是整个ids列表:
ids = [8, 9, 10, 11, 12] field = ['person'] container = [] for i in ids: # 用当前的i生成单元素列表,和field配对 container.append(dict(zip(field, [i])))
方案2:列表推导式(简洁高效)
既然field只有一个键,咱们可以直接用键名对应每个i,一行搞定:
ids = [8, 9, 10, 11, 12] field = ['person'] container = [{field[0]: i} for i in ids]
方案3:保留扩展性的写法(适配多键场景)
如果以后field可能增加多个键,这种写法能轻松适配,不需要大改:
ids = [8, 9, 10, 11, 12] field = ['person'] container = [dict(zip(field, [i])) for i in ids]
验证结果
运行任意一种方案,都能得到你预期的结果:
[{'person': 8}, {'person': 9}, {'person': 10}, {'person': 11}, {'person': 12}]
内容的提问来源于stack exchange,提问作者PersonPr7
相关产品推荐
相关产品推荐

