如何在Python字典中删除键值对?

3

假设我有这样一个字典:

d = {'ben' : 10, 'kim' : 20, 'bob' : 9}

有没有一种方法可以从字典中删除类似于('bob',9)这样的一对键值对?我已经知道了d.pop('bob'),但是即使该值不是9,它也会将该键值对删除。
现在我能想到的唯一方法是像这样:
if (d.get('bob', None) == 9):
    d.pop('bob')

但是有没有更简单的方法呢?可能根本不需要使用if语句。

6
不,那就是正确的方式。 - Jon Clements
你可以省略None,因为它是默认值,if d.get('bob') == 9: - Chris_Rands
2个回答

8
pop也会返回值,所以从性能(虽然可能微不足道)和可读性的角度来看,使用del可能更好。除此之外,我认为没有更简单/更好的方法可以做到。
from timeit import Timer


def _del():
    d = {'a': 1}
    del d['a']


def _pop():
    d = {'a': 1}
    d.pop('a')

print(min(Timer(_del).repeat(5000, 5000)))
# 0.0005624240000000613
print(min(Timer(_pop).repeat(5000, 5000)))
# 0.0007729860000003086

0

这里你想要执行两个操作

1)你想要测试条件d['bob']==9。 2)如果第一个答案为真,你想要删除键和值。

因此我们不能省略测试部分,这需要使用if。但我们肯定可以在一行中完成它。

如果d.get('bob')==9,则d.pop('bob'),否则无。


嗯...从技术上讲,你也可以把 if d.get('bob') == 9: del d['bob'] 写成一行代码-因此我不确定这种写法除了用 if/else使语言更复杂之外还有什么其他好处? - Jon Clements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接