从字典的列表中删除一个元素
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)}
这个:
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)}