假设我有这样一个字典:
d = {'ben' : 10, 'kim' : 20, 'bob' : 9}
有没有一种方法可以从字典中删除类似于
('bob',9)
这样的一对键值对?我已经知道了d.pop('bob')
,但是即使该值不是9
,它也会将该键值对删除。现在我能想到的唯一方法是像这样:
if (d.get('bob', None) == 9):
d.pop('bob')
但是有没有更简单的方法呢?可能根本不需要使用if语句。
假设我有这样一个字典:
d = {'ben' : 10, 'kim' : 20, 'bob' : 9}
('bob',9)
这样的一对键值对?我已经知道了d.pop('bob')
,但是即使该值不是9
,它也会将该键值对删除。if (d.get('bob', None) == 9):
d.pop('bob')
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
这里你想要执行两个操作
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
None
,因为它是默认值,if d.get('bob') == 9:
。 - Chris_Rands