2016-12-16 120 views
1

我試圖迭代字典以刪除鍵是數字的所有項目。Python從字典中刪除密鑰它是一個數字

dict= {'hello':'3', 'baby':'5', '33':'6'} 

for k in dict.keys(): 
    if k.isdigit(): 
     del dict[k] 

結果我需要的是這樣的:

dict={'hello':'3', 'baby':'5'} 

我使用上面的代碼,但它不工作? 有人能幫助我嗎?

+1

這似乎工作得很好,當我運行你的代碼。在附註中,在基本python類型(如'dict')之後命名變量會在某些時候導致你的悲傷。 – larsks

回答

3

不用刪除,同時通過循環字典項目,您可以創建一個新的字典:

dict_ = {'hello':'3', 'baby':'5', '33':'6'} 

{k: v for k, v in dict_.items() if not k.isdigit()} 
# {'baby': '5', 'hello': '3'} 
+0

注意:它不會刪除原始'dict'中的項目。而是用過濾的內容返回新的列表 –

+0

但它是更好的方式 –

1

錯誤RuntimeError: dictionary changed size during iteration,因爲它說,擡起因爲dictionnary是迭代過程中修改。一個解決辦法是先註冊所有的鍵,然後修改dictionnary:

dict= {'hello':'3', 'baby':'5', '33':'6'} 

for k in tuple(dict.keys()): # iterate on a tuple of values that happened to be in dict's keys 
    if k.isdigit(): 
     del dict[k] 

其他的,更Python,是使用強度符號的dictionnary像this answer建dictionnary到位,例如。

Btw,dict對於dict類型的對象來說是一個非常糟糕的名稱。

0

問題是因爲您在遍歷時正在更新字典。首先將密鑰存儲在列表中,然後從字典中刪除。

試試這個:

dic= {'hello':'3', 'baby':'5', '33':'6'} 

x=dic.keys() 
for k in x: 
    if k.isdigit(): 
     del dic[k] 
print dic 

輸出:

{'baby': '5', 'hello': '3'} 
+1

這仍然不適用於我在python 3.'x = list(dic.keys())或元組(dic.keys())'可能是要走的路(儘管沒有投票)。 – Psidom

+0

這個工程在Python 2.你沒有提到任何你需要python 3的地方! –

0

這裏是另一個解決方案使用popmap修改到位您最初的詞典:

my_dict = {'a':1, 'b':2, 'c':3, '11':4, '12':5} 
_ = map(lambda k: my_dict.pop(k), [k for k in my_dict if k.isdigit()]) 
# The map functions modifies in place your dictionary 

輸出:

>> my_dict 
>> {'a': 1, 'b': 2, 'c': 3} 
相關問題