在键未知时从字典中删除项

116 投票
10 回答
233101 浏览
提问于 2025-04-16 14:30

如何根据值来从字典中删除一个项目,也就是说,当你不知道这个项目的键时,最好的方法是什么呢?这里有一个简单的方法:

for key, item in some_dict.items():
    if item is item_to_remove:
        del some_dict[key]

有没有更好的方法呢?在遍历字典的时候直接删除项目有什么问题吗?

10 个回答

52

这段代码是用来处理某些数据的。它可能会涉及到一些循环、条件判断或者数据存储的操作。具体来说,代码块的内容会告诉我们如何一步一步地完成某个任务,通常是为了让计算机能够理解并执行我们想要的操作。

在编程中,我们经常需要用代码来告诉计算机该做什么,而这段代码就是一个例子。它可能会包含一些变量,这些变量就像是存放信息的小盒子,里面可以放数字、文字或者其他数据。通过这些变量,我们可以在代码中进行各种计算和操作。

总之,这段代码的目的是为了让计算机完成特定的工作,而我们通过编写代码来实现这个目标。

a = {'name': 'your_name','class': 4}
if 'name' in a: del a['name']
118

dict.pop(key[, default]) 这个方法可以让你在知道键的情况下删除字典中的项目。如果成功删除了这个项目,它会返回这个键对应的值;如果没有找到这个键,它就会返回你传入的 default 值。详细信息可以查看 官方文档

举个例子:

>>> dic = {'a':1, 'b':2}
>>> dic
{'a': 1, 'b': 2}
>>> dic.pop('c', 0)
0
>>> dic.pop('a', 0)
1
>>> dic
{'b': 2}
93

要注意的是,你现在正在检查对象的身份(is 只有在两个操作数在内存中是同一个对象时才会返回 True - 这并不总是适用于用 == 比较相等的两个对象)。如果你是故意这样做的,那么你可以把你的代码改成:

some_dict = {key: value for key, value in some_dict.items() 
             if value is not value_to_remove}

但是这样可能并不能达到你想要的效果:

>>> some_dict = {1: "Hello", 2: "Goodbye", 3: "You say yes", 4: "I say no"}
>>> value_to_remove = "You say yes"
>>> some_dict = {key: value for key, value in some_dict.items() if value is not value_to_remove}
>>> some_dict
{1: 'Hello', 2: 'Goodbye', 3: 'You say yes', 4: 'I say no'}
>>> some_dict = {key: value for key, value in some_dict.items() if value != value_to_remove}
>>> some_dict
{1: 'Hello', 2: 'Goodbye', 4: 'I say no'}

所以你可能想用 != 来代替 is not

撰写回答