私は辞書を持っています
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
これは非常に高速です。
En_Value = lang['en']
lang.clear()
lang['en'] = En_Value
新しいものを作ってみませんか?
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はコメントで、私のソリューションは元のオブジェクトを変更しないでおくと指摘しました。
代わりにkeys()
を繰り返します:
_for k in lang.keys():
if k != 'en':
del lang_name[k]
_
Python 3を使用している場合は、代わりにlist(lang.keys())
を使用する必要があると思います。
pop()
このようなfor
ループを介して
[s.pop(k) for k in list(s.keys()) if k != 'en']