从Python字典中删除多个键

6 投票
3 回答
6982 浏览
提问于 2025-04-17 08:03

有没有什么简单有效的方法可以一次性从Python字典中删除多个键呢?

比如说;

x = {'a': 5, 'b': 2, 'c': 3}
x.pop('a', 'b')
print x
{'c': 3}

3 个回答

2

我通常使用的步骤是这样的:

  1. 先列出要从映射中删除的键的清单;
  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. 1.88秒 1.9纳秒/次(100%)
  2. 2.41秒 2.4纳秒/次(128%)
  3. 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}
  1. 2.03秒 2.0纳秒/次(100%)
  2. 2.38秒 2.4纳秒/次(117%)
  3. 4.11秒 4.1纳秒/次(202%)

不过,del依然是最快的。

14

使用 这个 del 语句

x = {'a': 5, 'b': 2, 'c': 3}
del x['a'], x['b']
print x
{'c': 3}

撰写回答