Почему этот словарь 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)