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

Python中使用含重复值的列表生成字典列表的问题求助

解决Python中用含重复值列表生成字典列表的问题

嘿,我来帮你搞定这个问题!我猜你大概率是遇到了字典引用复用的坑——这种情况在处理含重复值的列表生成字典列表时特别常见。先给你举个典型的错误示例,看看是不是和你的情况匹配:

常见错误代码示例

values = ["a", "b", "a", "c"]
target_key = "item"
result_list = []
temp_dict = {}

for val in values:
    temp_dict[target_key] = val
    result_list.append(temp_dict)

print(result_list)

你预期的输出可能是 [{'item': 'a'}, {'item': 'b'}, {'item': 'a'}, {'item': 'c'}],但实际输出却是:

[{'item': 'c'}, {'item': 'c'}, {'item': 'c'}, {'item': 'c'}]

问题根源

这是因为你在循环外面创建了temp_dict,每次循环只是修改这个字典里的值,然后把它的引用添加到列表中。列表里的所有元素其实都指向同一个字典对象,最后一次循环修改的值会覆盖之前所有的记录。

解决方案

方案1:循环内创建新字典

每次循环都新建一个独立的字典,这样每个元素都是互不影响的对象:

values = ["a", "b", "a", "c"]
target_key = "item"
result_list = []

for val in values:
    # 每次循环都生成新字典
    result_list.append({target_key: val})

print(result_list)

输出完全符合预期:

[{'item': 'a'}, {'item': 'b'}, {'item': 'a'}, {'item': 'c'}]

方案2:用列表推导式简化代码

如果想让代码更简洁优雅,Python的列表推导式是绝佳选择:

values = ["a", "b", "a", "c"]
target_key = "item"
result_list = [{target_key: val} for val in values]

print(result_list)

效果和方案1完全一致,而且更符合Pythonic的写法。

扩展场景:多键值对的重复列表

如果你的列表是按“键值对”重复的结构(比如["name1", 100, "name2", 200, "name1", 150]),要生成包含多个键的字典列表,可以这样处理:

raw_data = ["name1", 100, "name2", 200, "name1", 150]
result_list = []

# 按步长2遍历,每次取一组键值对
for i in range(0, len(raw_data), 2):
    result_list.append({
        "username": raw_data[i],
        "score": raw_data[i+1]
    })

print(result_list)

输出:

[{'username': 'name1', 'score': 100}, {'username': 'name2', 'score': 200}, {'username': 'name1', 'score': 150}]

核心总结

解决这类问题的关键就是:不要在循环外复用同一个字典对象,确保每次循环都创建新的字典实例,这样列表中的每个元素都是独立的,不会被后续的修改操作覆盖。

内容的提问来源于stack exchange,提问作者Deepak Kiran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:30:17