2015-07-19 91 views
1

````从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.But我得到了导致字典作为

{"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

看看[简单的方法来通过值删除列表元素](https://stackoverflow.com/questions/2793324/is-there-a-simple-way-to-delete-a-list-element-by-value- in-python) – JGreenwell

+0

无法用Python进行复制2.7.6 –

+1

您应该发布您的整个代码。乍一看,这看起来像实习,它不是Python数组的默认行为。从所有阵列没有interning。 –

回答

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)} 
+0

Thanks..it工作..... –

1

编辑==我猜(因为dictionary的一代没有给出)==编辑。 原因是密钥'00''01',...的值指向相同的列表。修改其中一个肯定会影响其他人。

尝试使用这生成您的字典

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

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

+0

奇怪的是,他们都指向相同的参考。如果他正在生成列表中显示的列表,列表应该是不同的,至少在Python 2中。我不确定Python 3是否改变了这一点。 –

+0

为什么奇怪? 'an_list_instance = range(1,10); dictionary = dict((str(x).zfill(2),an_list_instance)x在范围内(100))' – YuMS

+0

我看到了,但他说dict就是这样的..我猜这不是它是如何产生的。 – YuMS

1

这个问题与指针有关。

替换此:

dictionary[keyis] = list2 

与此:

dictionary[keyis] = [int(i) for i in list2] 

你正确地创建列表2,但是当你进入循环Python没有做它的一个全新副本每一次迭代。它使指针指向原始列表。 Python看到:

dictionary[keyis] = list2 

,并说:“哦,我列表2承认,名字我有一个在内存中已经是一个对象,我会用刚刚更新原件及以下链接,它节省一些空间的任何!!!时间有人想要查看它或更新它我只会处理原始的东西,一切都将永远真棒!“

OK,也许Python解释器不是热情,但是这就是我喜欢把它。最终的结果是,所有的字典值在原始列表指向。