2015-07-19 85 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解釋器不是熱情,但是這就是我喜歡把它。最終的結果是,所有的字典值在原始列表指向。

相關問題