Python中如何仅修改字典内指定键对应列表的单个元素
问题原因
dict.fromkeys() 方法在传入可变类型作为默认值时,不会为每个键单独创建新的可变对象,而是让所有键共享同一个对象的引用。你代码中所有键对应的[0,0]列表本质上是同一个列表对象,修改任意一个键对应的列表元素,所有键的取值都会同步变化。
解决方法
方式1:使用字典推导式初始化字典
字典推导式会为每个键单独创建独立的列表对象,不存在共享引用的问题:
my_dict = {k: [0, 0] for k in range(0, 24, 2)} my_test_key = 2 my_dict[my_test_key][0] += 1 print(my_dict)
运行上述代码即可得到你期望的结果,仅键2对应列表的第0位会执行增量操作。
方式2:使用collections.defaultdict实现
如果后续需要动态向字典中添加新键,也可以通过defaultdict实现自动初始化独立的默认列表:
from collections import defaultdict my_dict = defaultdict(lambda: [0, 0]) # 预初始化所有需要的键 for k in range(0, 24, 2): _ = my_dict[k] my_test_key = 2 my_dict[my_test_key][0] += 1 print(dict(my_dict))
内容的提问来源于stack exchange,提问作者Borzanagan
相关产品推荐
相关产品推荐

