Преобразовать цикл в словарь

У меня есть небольшая программа, которая прекрасно работает. Я пытаюсь заставить себя пересмотреть \ проанализировать мой код, чтобы попытаться сделать мой код (и себя) немного лучше.

Мне было интересно, если эта небольшая часть кода:

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])])
Другие вопросы по тегам