从字典的列表中删除一个元素

Deleting an element from a list in a dictionary

这个:

deck = {1:[1,2,3,4], 2:[1,2,3,4], 3:[1,2,3,4]}    
print(deck)
del deck[1][2]
print(deck)

给出这个:

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

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

这是我所期望的,但是这个:

deck = {1:None, 2:None, 3:None}
suit =[1,2,3,4]
for i in range(len(deck)):
deck[i+1] = suit      
print(deck)
del deck[1][2]
print(deck) 

给出这个:

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

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

如您所见,del 关键字删除了每个键值的索引 2,而不仅仅是键值 1。 抱歉,如果这很明显,我正在学习并对此感到困惑。

字典中的每个元素都引用了同一个列表。因此,当您从其中一个删除一个元素时,它会通过所有这些元素可见(因为,如前所述,它们实际上是同一个列表!)。

相反,dict 的每个元素都应该有一个不同的列表副本:

for i in range(len(deck)):
    deck[i+1] = suit[:]

旁注:
这个循环可以替换为更“Pythonic”的 dict-comprehension:

deck = {i:suit[:] for i in range(1,4)}