删除除字典中的一个以外的所有键

时间:2012-09-12 11:52:22

标签: python dictionary

我有一本字典

lang = {'ar':'arabic', 'ur':'urdu','en':'english'}

我想要删除除一个键以外的所有键。 假设我想在此处仅保存en。 我该怎么做 ? (pythonic解决方案)
我尝试了什么

In [18]: for k in lang:
   ....:     if k != 'en':
   ....:         del lang_name[k]
   ....

这给了我运行时错误:RuntimeError: dictionary changed size during iteration

4 个答案:

答案 0 :(得分:26)

为什么不创建一个新的?

lang = {'en': lang['en']}

编辑:我和jimifiki解决方案之间的基准:

$ python -m timeit "lang = {'ar':'arabic', 'ur':'urdu','en':'english'}; en_value = lang['en']; lang.clear(); lang['en'] = en_value"
1000000 loops, best of 3: 0.369 usec per loop

$ python -m timeit "lang = {'ar':'arabic', 'ur':'urdu','en':'english'}; lang = {'en': lang['en']}"
1000000 loops, best of 3: 0.319 usec per loop

编辑2 :jimifiki在评论中指出我的解决方案保持原始对象不变。

答案 1 :(得分:19)

这很快:

En_Value = lang['en']
lang.clear() 
lang['en'] = En_Value

答案 2 :(得分:5)

代替keys()

for k in lang.keys():
    if k != 'en':
        del lang_name[k]

如果您使用的是Python 3,我相信您需要使用list(lang.keys())

答案 3 :(得分:3)

pop()通过for循环播放

[s.pop(k) for k in list(s.keys()) if k != 'en']