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

Python元组列表转字典列表时值覆盖问题求助

解决字典引用导致列表元素被覆盖的问题

你遇到的问题本质是可变对象的引用特性——你在循环里一直复用同一个description_sum字典,每次修改它的键值对后,把它的引用添加到列表中。列表里的所有元素其实都指向同一个字典对象,所以当你最后一次修改字典时,所有列表元素都会同步变成这个最终值。

修复方案:每次循环创建新字典

把字典的定义放到循环内部,这样每次迭代都会生成一个全新的字典实例,避免引用复用:

result = ([('A', 210L), ('B', 1L), ('C', 269L)], 3)
all_descriptions_sums = []

for desc, num in result[0]:
    # 每次循环新建一个字典,而非修改同一个
    description_sum = {
        'description': desc,
        'sum': int(num)
    }
    all_descriptions_sums.append(description_sum)

print(all_descriptions_sums)

执行这段代码就能得到你预期的结果:

[{'description':'A','sum':210},{'description':'B','sum':1},{'description':'C','sum':269}]

更简洁的写法:列表推导式

Python的列表推导式可以帮你更高效地完成这个转换,同时自动避免引用问题:

result = ([('A', 210L), ('B', 1L), ('C', 269L)], 3)
all_descriptions_sums = [{'description': desc, 'sum': int(num)} for desc, num in result[0]]

这段代码和上面的循环逻辑完全一致,但更简洁易读,也是处理这类转换的常用方式。

核心知识点回顾

在Python中,字典、列表这类可变对象是通过引用传递的。如果你在循环中反复修改同一个可变对象并添加到列表,列表里的所有元素都会指向这个对象的内存地址,最终所有元素都会显示为最后一次修改的结果。解决这类问题的关键就是:每次迭代创建新的可变对象实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:10