2016-02-27 93 views
0

我想從Python字典中刪除一些鍵。密鑰在列表中提供;到目前爲止我的代碼:從Python字典中刪除鍵

my_keys = [2,4] 
my_dict = {1:"aaaa" , 2: "bbb", 3:"ccc", 4:"ddd" } 

for number in my_keys: 
    for key, value in my_dict.items(): 
      if key == number: 
       del my_dict[(key)] 
+4

爲什麼第二次循環?爲什麼不簡單地'del my_dict [數字]'? – njzk2

+1

@ njzk2可能是因爲密鑰可能在字典中,也可能不在字典中。 – ffledgling

+0

@ffledgling好點 – njzk2

回答

3

您可以使用字典理解,就像這樣:

{x:y for x,y in my_dict.items() if x not in my_keys} 

由於e0k和njzk2建議的意見,如果你樂意修改現有的字典,以下工作得更好:

for key in my_keys: 
    try: 
     del my_dict[key] 
    except KeyError: 
     pass # Key wasn't in the dictionary at all. 
+2

修改現有的'dict'可能比創建一個新的更有效。 – e0k

+0

@ e0k肯定的,這是njzk2在他的評論中已經提出的,我會加入它。 – ffledgling

1

這裏是你如何在地方做到這一點:

>>> my_keys = [2,4] 
>>> my_dict = {1:"aaaa" , 2: "bbb", 3:"ccc", 4:"ddd" } 
>>> for key in my_keys: 
...  del my_dict[key] 
... 
>>> my_dict 
{1: 'aaaa', 3: 'ccc'} 

一點題外話:要刪除密鑰,並獲得價值,使用dict.pop

>>> x = my_dict.pop(1) 
>>> x 
'aaaa' 
>>> my_dict 
{3: 'ccc'} 
1

你可以使用範圍爲2步,然後刪除範圍內的每個值的每個關鍵。您也可以使用map,這是一個很棒的功能。

map(my_dict.pop, [2,4]) 

如果你想趕上一個錯誤的關鍵不是在字典中,使用這樣一個lambda函數:

map(lambda x: my_dict.pop(x, None), [2,4])