2016-02-27 96 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])