Skip to main content
 首页 » 编程设计

值设置为列表的 Python 字典行为异常

2025年05月04日15tintown

我知道 list 对象可以就地改变,但是 list() 每次都应该返回一个独立的 list 对象叫。现在我对输出感到困惑:

L = [1, 2, 3, 4] 
# list() should  
D = dict.fromkeys(L, list()) 
print(D) # {1: [], 2: [], 3: [], 4: []} 
D[1].append(1989) 
print(D) # {1: [1989], 2: [1989], 3: [1989], 4: [1989]} 

所需的输出应该是:

{1: [1989], 2: [], 3: [], 4: []} 

请您参考如下方法:

您的代码的问题在于 fromkeys 构造函数为每个键重用相同的值。因此 list() 只计算一次。

您可以使用字典理解:

D = {x:list() for x in L} 

或者,如果您知道您将始终在字典中使用列表,请使用 defaultdict工厂:

from collections import defaultdict 
 
D = defaultdict(list) 
D[1].append(1989) 
D[2].append(2001) 
 
print(D) # {1: [1989], 2: [2001]}