Python字典值按序赋值异常:循环仅修改首个值的问题排查
问题原因与解决办法
你的函数有两个核心问题:
- 循环里第一次迭代就执行return,直接终止了函数,所以只处理了第一个值。
- 遍历
D.values()拿到的是值的副本,修改value变量不会影响字典本身——整数是不可变类型,value += c只是让变量指向新的整数,原字典里的0根本没被改动。
正确实现方式
方式一:遍历键修改值
直接通过字典的键来更新对应的值,这样才能真正修改字典内容:
def Ord_Values_in_Dic(D): c = 0 for key in D: c += 1 D[key] = c return D
方式二:用enumerate简化计数
用enumerate可以省去手动维护计数器c,写法更简洁:
def Ord_Values_in_Dic(D): # start=1让计数从1开始 for idx, key in enumerate(D, start=1): D[key] = idx return D
测试效果
假设你初始字典是这样的:
my_dict = dict.fromkeys(['x', 'y', 'z'], 0) print(Ord_Values_in_Dic(my_dict)) # 输出:{'x': 1, 'y': 2, 'z': 3}
如果不想先创建全0字典,也可以一步生成目标字典:
keys = ['x', 'y', 'z'] ordered_dict = {k: i+1 for i, k in enumerate(keys)}
内容的提问来源于stack exchange,提问作者Liscivia
相关产品推荐
相关产品推荐

