Преобразовать цикл в словарь
У меня есть небольшая программа, которая прекрасно работает. Я пытаюсь заставить себя пересмотреть \ проанализировать мой код, чтобы попытаться сделать мой код (и себя) немного лучше.
Мне было интересно, если эта небольшая часть кода:
temp2 = {}
for key in sorted(temp1.keys()):
temp2[key] = temp1[key]
не может быть переписан как словарь.
В первую очередь из-за моего глубокого недостатка опыта я не могу "преобразовать" это в понимание.
Все, что нужно сделать, это взять словарь temp1
, сортируйте и размещайте вновь отсортированные key:value
пар в temp2
,
Как я уже говорил выше, все работает так, как есть, но я пытаюсь выучить шаблоны обнаружения, где я могу сделать улучшения.
1 ответ
Прямой перевод этого слова в словарь понятен:
temp2 = {key: value for key, value in sorted(temp1.items())}
Если вы не хотите использовать value
в качестве выключателя, если ключи равны, вы также можете предоставить key
так что вы сортируете только на основе key
:
temp2 = {key: value for key, value in sorted(temp1.items(), key=lambda x: x[0])}
Даже если словари "заказаны" в python-3.6, это не значит, что вы должны на них полагаться (официально упорядоченность - просто побочный эффект!). Лучше использовать OrderedDict
и быть на безопасной стороне:
from collections import OrderedDict
temp2 = OrderedDict([(key, value) for key, value in sorted(temp1.items(), key=lambda x: x[0])])