2017-11-18 1018 views
0

我有一本字典如何刪除字典中的字典的鍵值對?

dicto = {12:{34:45,56:78},45:{67:23,90:15}} 

我想刪除一個鍵值對說dictionary.How的關鍵4567:23做呢?

這是我做的,到目前爲止,但我得到的錯誤

dicto = {12:{34:45,56:78},45:{67:23,90:15}} 
for k,v in dicto.items(): 
    for i in v.keys(): 
     if i == 67: 
      del v[i] 

print(dicto) 

,我得到的是

Traceback (most recent call last): 
    File "/home/souvik/Sublime-text programs/TestCode.py", line 4, in <module> 
    for i in v.keys(): 
RuntimeError: dictionary changed size during iteration 
[Finished in 0.1s with exit code 1] 

如何刪除特定的鍵值對的錯誤?

+0

@PatrickArtner在這裏我有一本詞典裏面的字典,所以我無法應用正常的刪除方法 –

+0

你可以使用pop() - 查看答案。您將從所有內部字符中刪除密鑰,因爲您遍歷所有內部字符。 –

回答

2

或更貼近你做了什麼,並刪除所有內部字典的鍵67,而無需知道theire鍵以及:

會爲蟒蛇2.7

dicto = {12:{34:45,56:78},45:{67:23,90:15}} 
print "" 
for k,v in dicto.items(): 
    for i in v.items(): 
     if (i[0] == 67): 
       v.pop(i[0]) 
print(dicto) 
工作

輸出:

{12: {56: 78, 34: 45}, 45: {90: 15}} 

而不是修改英一些元素告訴你正確的字典內從自身刪除其鍵/值對

此代碼將刪除從所有內部字典的關鍵``67`:

dicto = {12:{34:45,56:78},45:{67:23,90:15},99:{67:1,88:5}} 

會導致

{99: {88: 5}, 12: {56: 78, 34: 45}, 45: {90: 15}} 

編輯: 作爲Souvik雷伊指出,3.6這不會工作(與pyfiddle測試它爲2.7,其中它的工作原理)

將與3.6

dicto = {12:{34:45,56:78},45:{67:23,90:15},99:{67:1,88:5}} 
print ("") 
dictsToRemoveKeysFrom = [] 
for k,v in dicto.items(): 
    print (v) 
    for i in v.items(): 
     if (i[0] == 67): 
       dictsToRemoveKeysFrom.append(v) 

for d in dictsToRemoveKeysFrom: 
    d.pop(67) 

print(dicto) 

你得到的錯誤工作,因爲你改變dictionarys在遍歷theire父。只需記住之後修改和修改的字典。

+1

首先你錯過了.items()給出了兩個迭代器,所以它會拋出一個錯誤,該對象不是可以下標的,因爲我是一個int,並且你正試圖訪問我[0] –

+0

@SouvikRay對不起,我的www.pyfiddle .io坐在Python 2.7上,在這裏工作。第二版將適用於3.6。 –

+0

@SouvikRay'items()'會給出2個項目,但是如果我像這裏一樣使用它,'i'將會是一個元組,我可以通過'i [0]'來訪問它,沒問題。爲了避免錯誤,只需記住字典修改和修改他們的迭代 –

0

這是simplyer,因爲它看起來,沒有找到需要的:

del k[45][63] 
+0

爲此,你需要知道45 - 但他的解決方案將從任何內部字典中刪除此密鑰,不是嗎? –

1

似乎很簡單。

>>> dicto = {12:{34:45,56:78},45:{67:23,90:15}} 
>>> dicto 
{12: {34: 45, 56: 78}, 45: {67: 23, 90: 15}} 
>>> del dicto[45][67] 
>>> dicto 
{12: {34: 45, 56: 78}, 45: {90: 15}} 
+0

爲此,你需要知道45,但他的解決方案將從任何內部字典中刪除此密鑰,不是嗎? –