Python使用zip从两个列表创建字典出现非预期结果问题求解
第一种写法失效的原因
[{}] * len(day_list)的执行逻辑是先创建1个空字典对象,再把这个对象的引用重复N次(N为day_list的长度)生成列表,因此列表中的所有元素都指向同一个内存地址的字典实例。
将这个列表作为value和key列表打包生成字典后,所有key对应的value都共享同一个字典对象,任意修改其中一个value的内容,所有value都会同步更新,就会出现你观察到的所有值都等于最后一次赋值结果的问题。
推荐的Pythonic实现方式
最简洁直观的方案是使用字典推导式实现,每次循环都会独立创建新的空字典,不存在引用复用的问题:
day_list = list(range(1,4)) days = {day: {} for day in day_list}
如果偏好使用zip方法实现,可以将原来的列表重复写法替换为生成器表达式,每次迭代都会生成新的空字典:
days = dict(zip(day_list, ({} for _ in day_list)))
内容的提问来源于stack exchange,提问作者mapgeek
相关产品推荐
相关产品推荐

