有没有一种从字典中删除键而不引发KeyError的单行方法?
if 'key' in my_dict:
del my_dict['key']
有没有一种从字典中删除键而不引发KeyError的单行方法?
if 'key' in my_dict:
del my_dict['key']
当前回答
要删除键而不管它是否在字典中,请使用dict.pop()的双参数形式:
my_dict.pop('key', None)
如果字典中存在key,则返回my_dict[key],否则返回None。如果未指定第二个参数(即my_dict.pop('key')),并且键不存在,则会引发KeyError。
要删除保证存在的密钥,还可以使用
del my_dict['key']
如果键不在字典中,这将引发KeyError。
其他回答
您可以使用字典理解创建一个新的字典,并删除该键:
>>> my_dict = {k: v for k, v in my_dict.items() if k != 'key'}
您可以按条件删除。如果密钥不存在,则无错误。
我花了一些时间才弄清楚my_dict.pop(“key”,“None”)到底在做什么。因此,我将添加以下内容作为答案,以节省其他人的搜索时间:
pop(键[,默认值])如果键在字典中,请删除它并返回其值,否则返回默认值。如果未给定默认值,且密钥不在字典,则会引发KeyError。
文档
特别是回答“是否有一种单行方式可以做到这一点?”
if 'key' in my_dict: del my_dict['key']
……嗯,你问;-)
但是,您应该考虑,从dict中删除对象的这种方式不是原子的。在if语句期间,“key”可能在my_dict中,但可能在执行del之前被删除,在这种情况下,del将失败,并出现KeyError。鉴于此,使用dict.pop或类似于
try:
del my_dict['key']
except KeyError:
pass
当然,这绝对不是一句话。
如果您需要在一行代码中从字典中删除大量键,我认为使用map()非常简洁,而且Python可读:
myDict = {'a':1,'b':2,'c':3,'d':4}
map(myDict.pop, ['a','c']) # The list of keys to remove
>>> myDict
{'b': 2, 'd': 4}
如果需要在弹出字典中没有的值时捕获错误,请在map()中使用lambda,如下所示:
map(lambda x: myDict.pop(x,None), ['a', 'c', 'e'])
[1, 3, None] # pop returns
>>> myDict
{'b': 2, 'd': 4}
或者在python3中,必须使用列表理解:
[myDict.pop(x, None) for x in ['a', 'c', 'e']]
它起作用了。即使myDict没有'e'键,'e'也不会导致错误。
要删除键而不管它是否在字典中,请使用dict.pop()的双参数形式:
my_dict.pop('key', None)
如果字典中存在key,则返回my_dict[key],否则返回None。如果未指定第二个参数(即my_dict.pop('key')),并且键不存在,则会引发KeyError。
要删除保证存在的密钥,还可以使用
del my_dict['key']
如果键不在字典中,这将引发KeyError。