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

为何双列表构建的字典所有键对应值均为100?代码逻辑解析

问题解析:为何字典所有键的值均为100?

先看你的代码及运行结果:

list_of_trees = list(range(50, 450, 50))

results_list = [2*trees for trees in list_of_trees] 

results_my = {}
for trees in list_of_trees:
    for result in results_list:
        results_my[trees] = result
        break

print(results_my)

>> {50: 100, 100: 100, 150: 100, 200: 100, 250: 100, 300: 100, 350: 100, 400: 100}

逐步拆解赋值逻辑

  1. 初始化列表:

    • list_of_trees生成的是[50, 100, 150, 200, 250, 300, 350, 400]
    • results_list是列表推导式生成的[100, 200, 300, 400, 500, 600, 700, 800],每个元素对应list_of_trees元素的2倍,这部分逻辑没问题。
  2. 嵌套循环的执行逻辑:

    • 外层循环:依次遍历list_of_trees中的每个元素(从50到400)
    • 内层循环:每次进入内层循环,只取results_list的第一个元素(也就是100),执行results_my[trees] = result赋值后,立刻用break跳出内层循环。
    • 也就是说,不管外层循环当前遍历到哪个trees值,内层循环都只执行一次,且永远取results_list的第一个元素赋值。

举个具体执行步骤的例子:

  • 第一次外层循环:trees=50,内层循环取result=100,赋值后break,此时results_my是{50:100}
  • 第二次外层循环:trees=100,内层循环还是取result=100,赋值后break,此时results_my变成{50:100, 100:100}
  • 后续每一次外层循环都是重复这个操作,最终所有键对应的值都是100。

正确的实现方式(用zip)

如果你想让每个trees对应results_list中位置匹配的值,用zip()是最简洁的方式:

results_my = dict(zip(list_of_trees, results_list))
# 输出会是 {50: 100, 100: 200, 150: 300, ..., 400: 800}

内容的提问来源于stack exchange,提问作者Matěj Prudil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:03:27