Python用dict.fromkeys创建字典更新嵌套列表时所有值同步修改问题
问题原因
你遇到的所有列表同步更新的问题,根源是字典的初始化方式错误:dict.fromkeys()方法如果传入第二个参数是可变对象(比如列表),会把同一个对象的引用赋值给字典的所有key。也就是说你所有用户对应的评分列表,本质上都指向内存里的同一个zeroRatings对象,修改任意一个用户的列表值,都会同步修改所有用户的列表。
你的ratingUpdate函数本身逻辑没有错误,不需要调整函数逻辑。
解决方案
修改字典的初始化逻辑即可,用字典推导式为每个用户生成独立的零值列表,两种常用写法:
- 如果你的零值列表是固定长度的全0列表,可以直接写:
ratingsDict = {user: [0,0,0,0,0,0] for user in users}
- 如果你要复用提前定义好的
zeroRatings变量,可以用列表的copy方法生成新对象:
ratingsDict = {user: zeroRatings.copy() for user in users}
可选优化
你的更新函数不需要循环遍历所有key,可以直接判断key是否存在,运行效率更高:
def ratingUpdate(key, index, rate, ratings): if key in ratings: ratings[key][index] = rate
内容的提问来源于stack exchange,提问作者Vel
相关产品推荐
相关产品推荐

