从Python字典中删除多个键
有没有什么简单有效的方法可以一次性从Python字典中删除多个键呢?
比如说;
x = {'a': 5, 'b': 2, 'c': 3}
x.pop('a', 'b')
print x
{'c': 3}
3 个回答
2
我通常使用的步骤是这样的:
- 先列出要从映射中删除的键的清单;
- 然后遍历这个清单,对每个键使用 del 来删除。
举个例子:
假设我想删除映射中所有的字符串键。首先,先把这些键列出来:
>>> x={'a':5,'b':2,'c':3,1:'abc',2:'efg',3:'xyz'}
>>> [k for k in x if type(k) == str]
['a', 'c', 'b']
现在我可以把这些键删除掉:
>>> for key in [k for k in x if type(k) == str]: del x[key]
>>> x
{1: 'abc', 2: 'efg', 3: 'xyz'}
3
删除多个键
我测试了三种方法的性能:
d = dict.fromkeys('abcdefghijklmnopqrstuvwxyz')
remove_keys = set('abcdef')
# Method 1
for key in remove_keys:
del d[key]
# Method 2
for key in remove_keys:
d.pop(key)
# Method 3
{key: v for key, v in d.items() if key not in remove_keys}
这是进行100万次操作的结果:
- 1.88秒 1.9纳秒/次(100%)
- 2.41秒 2.4纳秒/次(128%)
- 4.15秒 4.2纳秒/次(221%)
所以说,del
是最快的。
安全地删除多个键
不过,如果你想要安全地删除,这样就不会出现KeyError错误,你需要修改代码:
# Method 1
for key in remove_keys:
if key in d:
del d[key]
# Method 2
for key in remove_keys:
d.pop(key, None)
# Method 3
{key: v for key, v in d.items() if key not in remove_keys}
- 2.03秒 2.0纳秒/次(100%)
- 2.38秒 2.4纳秒/次(117%)
- 4.11秒 4.1纳秒/次(202%)
不过,del
依然是最快的。
14
使用 这个 del
语句:
x = {'a': 5, 'b': 2, 'c': 3}
del x['a'], x['b']
print x
{'c': 3}