Почему этот словарь python создается не по порядку с помощью setdefault()?

Я только начинаю играть с Python (фон VBA). Почему этот словарь создан не по порядку? Разве это не должно быть:1, b:2... и т. Д.?

class Card:
def county(self):
    c = 0
    l = 0
    groupL = {}  # groupL for Loop
    for n in range(0,13):
        c += 1
        l = chr(n+97)
        groupL.setdefault(l,c)
    return groupL

pick_card = Card()
group = pick_card.county()
print group

вот вывод:

{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12}

или он просто распечатывается?

1 ответ

Решение

Словари не имеют порядка в питоне. Другими словами, когда вы выполняете итерацию по словарю, порядок, в котором ключи / элементы "уступают", не соответствует порядку, в котором вы помещаете их в словарь. (Попробуйте свой код на другой версии python, и вы, скорее всего, получите другой упорядоченный вывод). Если вы хотите, чтобы словарь был заказан, вам нужен collections.OrderedDict который не был представлен до Python 2.7. Вы можете найти эквивалентные рецепты на ActiveState если вы используете старую версию Python. Однако часто бывает достаточно просто отсортировать предметы (например, sorted(mydict.items()),

РЕДАКТИРОВАТЬ в соответствии с запросом, например, OrderedDict:

from collections import OrderedDict
groupL = OrderedDict()  # groupL for Loop
c = 0
for n in range(0,13):
    c += 1
    l = chr(n+97)
    groupL.setdefault(l,c)

print (groupL)
Другие вопросы по тегам