从python字典中删除某些前缀的键的有效方法

use*_*486 2 python dictionary python-2.7

我有一个python字典,看起来像这样;

{'Prefix_1':'12', 'Prefix_2':'11', 'Prefix_3':'14', '1':'241', '2':'312', '3':'421'
}
Run Code Online (Sandbox Code Playgroud)

我想删除那些带有以'Prefix'开头的键的键值对.结果应该是一个看起来像这样的字典;

{'1':'241', '2':'312', '3':'421'
}
Run Code Online (Sandbox Code Playgroud)

我目前这样做的方法是逐个删除每一对del dictionary['Prefix_X'].有什么更有效的方法呢?

我正在使用python 2.7

sat*_*oru 6

由于其他答案都使用dict理解来创建一个新的dict并且保持原始dict不变,我将给出一个改变dict的地方:

for k in d.keys():
    if k.startswith('Prefix'):
        d.pop(k)
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

假设字典中有N个键,要查找具有给定前缀的所有键,您必须迭代所有键,这具有O(N)时间复杂度.

然后你需要逐个删除它们,在最坏的情况下,所有这些都使用给定的前缀,所以这也是O(N)时间复杂度.

O(N)的总时间复杂度.

  • 在 python 3 中可能会导致“RuntimeError:字典在迭代期间更改大小”,请改用“for k in list(d.keys()):” (2认同)