31

我有一本字典

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

4 回答 4

41

你为什么不创建一个新的?

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 在评论中指出我的解决方案保持原始对象不变。

于 2012-09-12T11:53:18.340 回答
27

这是相当快的:

En_Value = lang['en']
lang.clear() 
lang['en'] = En_Value
于 2012-09-12T12:10:51.043 回答
9

keys()而是迭代:

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

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

于 2012-09-12T11:55:14.237 回答
6

pop()它通过for这样的循环

[s.pop(k) for k in list(s.keys()) if k != 'en']
于 2017-10-10T04:22:28.943 回答