从Python字典中删除多个键

6
有没有一种高效的快捷方法可以从Python字典中一次性删除多个键?
例如:
x = {'a': 5, 'b': 2, 'c': 3}
x.pop('a', 'b')
print x
{'c': 3}
3个回答

14

使用del语句

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

运行得非常顺利 - Ajay Kumar

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 no 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 no in remove_keys}
  1. 2.03秒 2.0 纳秒/迭代 (100%)
  2. 2.38秒 2.4 纳秒/迭代 (117%)
  3. 4.11秒 4.1 纳秒/迭代 (202%)

不过,del 是最快的。


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'}

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