Ответ 1
Это довольно быстро:
En_Value = lang['en']
lang.clear()
lang['en'] = En_Value
У меня есть словарь
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
Это довольно быстро:
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']