Подтвердить что ты не робот

Удалить все ключи, кроме одного словаря

У меня есть словарь

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

Что я хочу сделать, это удалить все ключи, кроме одного ключа. Предположим, я хочу сохранить только en здесь. Как мне это сделать? (pythonic solution)
Что я пробовал:

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

Который дал мне ошибку времени выполнения: RuntimeError: dictionary changed size during iteration

4b9b3361

Ответ 1

Это довольно быстро:

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

Ответ 2

Почему бы вам просто не создать новый?

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 отметил в комментариях, что мое решение сохраняет исходный объект без изменений.

Ответ 3

Итерации над keys() вместо:

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

Если вы используете Python 3, я считаю, что вам нужно использовать list(lang.keys()).

Ответ 4

pop() через цикл for, подобный этому

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