我試圖迭代字典以刪除鍵是數字的所有項目。Python從字典中刪除密鑰它是一個數字
dict= {'hello':'3', 'baby':'5', '33':'6'}
for k in dict.keys():
if k.isdigit():
del dict[k]
結果我需要的是這樣的:
dict={'hello':'3', 'baby':'5'}
我使用上面的代碼,但它不工作? 有人能幫助我嗎?
我試圖迭代字典以刪除鍵是數字的所有項目。Python從字典中刪除密鑰它是一個數字
dict= {'hello':'3', 'baby':'5', '33':'6'}
for k in dict.keys():
if k.isdigit():
del dict[k]
結果我需要的是這樣的:
dict={'hello':'3', 'baby':'5'}
我使用上面的代碼,但它不工作? 有人能幫助我嗎?
不用刪除,同時通過循環字典項目,您可以創建一個新的字典:
dict_ = {'hello':'3', 'baby':'5', '33':'6'}
{k: v for k, v in dict_.items() if not k.isdigit()}
# {'baby': '5', 'hello': '3'}
注意:它不會刪除原始'dict'中的項目。而是用過濾的內容返回新的列表 –
但它是更好的方式 –
錯誤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
類型的對象來說是一個非常糟糕的名稱。
問題是因爲您在遍歷時正在更新字典。首先將密鑰存儲在列表中,然後從字典中刪除。
試試這個:
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'}
這仍然不適用於我在python 3.'x = list(dic.keys())或元組(dic.keys())'可能是要走的路(儘管沒有投票)。 – Psidom
這個工程在Python 2.你沒有提到任何你需要python 3的地方! –
這裏是另一個解決方案使用pop
和map
修改到位您最初的詞典:
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}
這似乎工作得很好,當我運行你的代碼。在附註中,在基本python類型(如'dict')之後命名變量會在某些時候導致你的悲傷。 – larsks