首页 > 解决方案 > 从字典中的列表中删除元素

问题描述

这:

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。抱歉,如果这很明显,我正在学习并对此感到困惑。

标签: listdictionarydel

解决方案


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

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

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

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

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

推荐阅读