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

时间:2015-07-19 03:52:58

标签: python dictionary

``我在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

3 个答案:

答案 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)}