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

嵌套for循环中字典值被覆盖,如何获取正确的更新字典列表?

问题原因与解决办法

你遇到的问题核心是字典是可变对象——你循环里操作的是fruit_lst里的原字典,每次update都是在修改同一个字典实例,end_lst里添加的只是这个字典的"引用"(可以理解为指向同一个东西的指针)。所以不管你append多少次,最后所有条目指向的都是被最后一次修改(Green)的那几个字典。

要解决这个问题,关键是每次循环时创建新的字典对象,而不是修改原字典。下面给你几种可行的写法:

方法1:字典解包创建新字典

直接把原字典的内容和新的color键值对合并成一个新字典:

end_lst = []
color_lst = ['Blue','Red','Purple','Green']
fruit_lst = [{'fruit':'apple'}, {'fruit':'pear'}, {'fruit':'mango'}]

for color in color_lst:
    for fruit in fruit_lst:
        # 用字典解包生成新字典,不修改原fruit
        new_fruit = {**fruit, 'color': color}
        end_lst.append(new_fruit)

print(end_lst)

方法2:复制原字典后修改

先复制原字典,再给副本添加color键,这样修改的是副本,不影响原字典:

end_lst = []
color_lst = ['Blue','Red','Purple','Green']
fruit_lst = [{'fruit':'apple'}, {'fruit':'pear'}, {'fruit':'mango'}]

for color in color_lst:
    for fruit in fruit_lst:
        # 复制原字典得到新对象
        fruit_copy = fruit.copy()
        fruit_copy.update({'color': color})
        end_lst.append(fruit_copy)

print(end_lst)

方法3:用列表推导式简化代码

如果想写得更简洁,可以用嵌套的列表推导式,一步生成目标列表:

color_lst = ['Blue','Red','Purple','Green']
fruit_lst = [{'fruit':'apple'}, {'fruit':'pear'}, {'fruit':'mango'}]

end_lst = [{**fruit, 'color': color} for color in color_lst for fruit in fruit_lst]

print(end_lst)

上面三种方法都能得到你想要的结果:每个水果对应每种颜色的独立字典条目,不会被后续循环覆盖。

内容的提问来源于stack exchange,提问作者Meme-ento

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:10:51