31

私は辞書を持っています

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

4

4 に答える 4

41

新しいものを作成しませんか?

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

編集:私のソリューションとジミフィキのソリューションの間のベンチマーク:

$ 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 に答える