簡體   English   中英

從 Python 字典中刪除多個鍵

[英]Remove more than one key from Python dict

是否有任何有效的快捷方法可以一次從 python 字典中刪除多個鍵?

例如;

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

使用del語句

x = {'a': 5, 'b': 2, 'c': 3}
del x['a'], x['b']
print x
{'c': 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}

以下是 1M 次迭代的結果:

  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.03s 2.0 ns/iter (100%)
  2. 2.38 秒 2.4 納秒/迭代 (117%)
  3. 4.11 秒 4.1 納秒/迭代 (202%)

盡管如此, del是最快的。

我使用的一般形式是這樣的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM