在python中从多值字典中删除特定值

2024-10-03 02:42:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本这样的python词典。在

dictionary = {"00":[1,2,3,4,5,6,7,8,9],"01":[1,2,3,4,5,6,7,8,9],"02":[1,2,3,4,5,6,7,8,9],"03":[1,2,3,4,5,6,7,8,9],"04":[1,2,3,4,5,6,7,8,9]........up-to "99":[1,2,3,4,5,6,7,8,9]}

我必须从“00”列表中删除值2。在

^{pr2}$

这里key的值是“00”,sudokumatrix[i][iindex]的值是2

{"00":[1,3,4,5,6,7,8,9],"01":[1,3,4,5,6,7,8,9],"02":[1,3,4,5,6,7,8,9],"03":[1,3,4,5,6,7,8,9],"04":[1,3,4,5,6,7,8,9].....}.

我得到的结果是:

{"00":[1,3,4,5,6,7,8,9],"01":[1,2,3,4,5,6,7,8,9],"02":[1,2,3,4,5,6,7,8,9],"03":[1,2,3,4,5,6,7,8,9],"04":[1,2,3,4,5,6,7,8,9]....}

我把整个代码发布在这里:

dictionary = dict()
zerotonine = "123456789"
list2 = list(zerotonine)
list2 = [int(i) for i in list2]
sudokumatrix=[]
for p in range(9):
     for q in range(9):
           keyis=str(p)+str(q)
           dictionary[keyis] = list2 


for i in range(9):
     initialinput = [1,2,3,4,5,6,7,8,9]
     list1=list(initialinput)
     list1 = [int(i) for i in list1]
     sudokumatrix.append(list1)

key = "00"

del dictionary[key][dictionary[key].index(sudokumatrix[0][1])]


print dictionary

Tags: keyinfordictionaryrangelist词典int
3条回答

与指针有关的问题。在

替换此项:

dictionary[keyis] = list2 

有了这个:

^{pr2}$

您正确地创建了list2,但是当您进入循环时,Python不会在每次迭代中都生成一个全新的副本。它生成指向原始列表的指针。Python看到:

dictionary[keyis] = list2

然后说“哦,列表2?我认得那个名字!我已经把它作为记忆中的对象了!我只需更新原始副本并将其链接到此处就可以节省一些空间!任何时候有人想看它或更新它,我会处理它的原始和一切将是可怕的永远!!!”在

好吧,也许python解释器不是那么热心,但我喜欢这样想。最终结果是所有字典值都指向原始列表。在

如果您不介意删除列表中出现的2,可以使用列表理解:

dictionary["00"] = [i for i in dictionary["00"] if i != 2]

这将创建一个新的列表,并避免更改其他值,因为您的dictionary值似乎都引用了同一个列表。在

编辑:是的,你的字典值引用同一个列表

您可以使用字典和列表理解来创建您的dictionary

^{pr2}$

EDIT==我想(因为dictionary的生成没有给出)==EDIT。 原因是键'00''01'。。。指向同一个列表。修改其中一个肯定会影响其他人。在

试着用这个来生成你的dict

dictionary = dict((str(x).zfill(2), range(1, 10)) for x in range(100))

这部分代码实际上没有错,但是使用list.remove()会使它更好。在

相关问题 更多 >