有没有一种从字典中删除键而不引发KeyError的单行方法?

if 'key' in my_dict:
    del my_dict['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

当然,这绝对不是一句话。

要删除键而不管它是否在字典中,请使用dict.pop()的双参数形式:

my_dict.pop('key', None)

如果字典中存在key,则返回my_dict[key],否则返回None。如果未指定第二个参数(即my_dict.pop('key')),并且键不存在,则会引发KeyError。

要删除保证存在的密钥,还可以使用

del my_dict['key']

如果键不在字典中,这将引发KeyError。

另一种方法是使用items()+dict理解。

items()加上dict理解也可以帮助我们完成键值对删除的任务,但它有一个缺点,即不是一种就地dict技术。实际上,如果创建了一个新的dict,除了我们不希望包含的key。

test_dict = {"sai" : 22, "kiran" : 21, "vinod" : 21, "sangam" : 21}

# Printing dictionary before removal
print ("dictionary before performing remove is : " + str(test_dict))

# Using items() + dict comprehension to remove a dict. pair
# removes  vinod
new_dict = {key:val for key, val in test_dict.items() if key != 'vinod'}

# Printing dictionary after removal
print ("dictionary after remove is : " + str(new_dict))

输出:

dictionary before performing remove is : {'sai': 22, 'kiran': 21, 'vinod': 21, 'sangam': 21}
dictionary after remove is : {'sai': 22, 'kiran': 21, 'sangam': 21}

我花了一些时间才弄清楚my_dict.pop(“key”,“None”)到底在做什么。因此,我将添加以下内容作为答案,以节省其他人的搜索时间:

pop(键[,默认值])如果键在字典中,请删除它并返回其值,否则返回默认值。如果未给定默认值,且密钥不在字典,则会引发KeyError。

文档

如果希望非常详细,可以使用异常处理:

try: 
    del dict[key]

except KeyError: pass

然而,如果键不存在,这比pop()方法慢。

my_dict.pop('key', None)

这对几个键来说并不重要,但如果你重复这样做,那么后一种方法是更好的选择。

最快的方法是:

if 'key' in dict: 
    del myDict['key']

但这种方法很危险,因为如果在两行之间删除“key”,就会引发KeyError。