我有一本字典
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
答案 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']