我有一个python字典看起来像这样;
{'Prefix_1':'12', 'Prefix_2':'11', 'Prefix_3':'14', '1':'241', '2':'312', '3':'421'
}
我想删除那些以'前缀'开头的键的键值对。结果应该是一个看起来像这样的字典;
{'1':'241', '2':'312', '3':'421'
}
我目前的做法是使用del dictionary['Prefix_X']
逐个删除每一对。有什么更有效的方法呢?
我正在使用python 2.7
答案 0 :(得分:6)
由于其他答案都使用dict理解来创建一个新的dict并且保持原始的dict不受影响,我将给出一个改变dict的地方:
for k in d.keys():
if k.startswith('Prefix'):
d.pop(k)
有更好的方法吗?
假设字典中有N个键,要查找具有给定前缀的所有键,您必须迭代所有键,这具有O(N)时间复杂度。
然后你需要逐个删除它们,在最坏的情况下,所有这些都使用给定的前缀,所以这也是O(N)时间复杂度。
O(N)的总时间复杂度。
答案 1 :(得分:2)
您可以对原始词典使用词典理解:
D = {'Prefix_1':'12', 'Prefix_2':'11', 'Prefix_3':'14', '1':'241', '2':'312', '3':'421'
NewDict = {k: D[k] for k in D if not k.startswith('Prefix')}
NewDict
{'2': '312', '3': '421', '1': '241'}
答案 2 :(得分:1)
使用字典理解
{k:v for k, v in d.items() if not k.startswith('Prefix')}
In [44]: {k:v for k, v in d.items() if not k.startswith('Prefix')}
Out[44]: {'1': '241', '2': '312', '3': '421'}
答案 3 :(得分:1)
>>> z = {'Prefix_1':'12', 'Prefix_2':'11', 'Prefix_3':'14', '1':'241', '2':'312', '3':'421'}
>>> {k:v for k,v in z.items() if not k.startswith('Prefix')}
{'1': '241', '3': '421', '2': '312'}
答案 4 :(得分:1)
d1 = {'Prefix_1':'12', 'Prefix_2':'11', 'Prefix_3':'14', '1':'241', '2':'312', '3':'421'}
d2 = {k: v for k, v in d1.iteritems() if not k.startswith('Prefix')}
print d1
print d2
答案 5 :(得分:1)
尝试这个。
for key in d.keys():
if 'Prefix' in key:
d.pop(key)