web-dev-qa-db-ja.com

辞書にある1つを除くすべてのキーを削除します

私は辞書を持っています

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

私がやりたいのは、1つのキーを除くすべてのキーを削除することです。ここにenだけを保存したいとします。どうすればいいですか? (Pythonicソリューション)
私が試したこと

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

これにより、実行時エラーが発生しました:RuntimeError: dictionary changed size during iteration

21
NIlesh Sharma

これは非常に高速です。

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

新しいものを作ってみませんか?

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はコメントで、私のソリューションは元のオブジェクトを変更しないでおくと指摘しました。

29
Fabian

代わりにkeys()を繰り返します:

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

Python 3を使用している場合は、代わりにlist(lang.keys())を使用する必要があると思います。

8
thegrinner

pop()このようなforループを介して

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