``我在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.我尝试使用以下语句。
del (dictionary[key][dictionary[key].index(sudokumatrix[i][iindex])]).
这里的键值为“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
答案 0 :(得分:1)
编辑== 我猜(因为没有给出dictionary
代) ==编辑。
原因是键'00'
,'01'
,...的值指向同一列表。修改其中一个肯定会影响其他人。
尝试使用它来生成你的词典
dictionary = dict((str(x).zfill(2), range(1, 10)) for x in range(100))
此部分的代码实际上没有错,但使用list.remove()
会更好。
答案 1 :(得分:1)
问题与指针有关。
替换这个:
dictionary[keyis] = list2
用这个:
dictionary[keyis] = [int(i) for i in list2]
你正确地创建了list2,但是当你进入循环时,Python并不会在每次迭代时都为它创建一个全新的副本。它生成一个指向原始列表的指针。 Python看到了:
dictionary[keyis] = list2
并说“哦,list2?我认出那个名字!我已经把它作为记忆中的一个对象!我只需要更新原始副本并在此链接就可以节省一些空间!任何时候有人想查看它或者更新它我将只处理原始,一切都将永远是真棒!“
好吧,也许python解释器不是那个热心,但这就是我喜欢的方式。最终结果是所有字典值都指向原始列表。
答案 2 :(得分:0)
如果您不介意删除列表中的每一个2
,都可以使用列表理解:
dictionary["00"] = [i for i in dictionary["00"] if i != 2]
这将创建一个新列表,并且会避免更改其他值,因为它显示所有dictionary
值都引用相同的列表。
编辑:是的,您的字典值引用相同的列表
您可以使用字典和列表理解来创建dictionary
dictionary = {str(x):[i for i in range(10)] for x in range(100)}