при запуске цикла в словаре в Python2 - PullRequest
0 голосов
/ 14 марта 2019

Я довольно новичок в Python, пришедшем из C ++ в качестве моего первого языка.Допустим, у меня есть словарь следующего содержания:

 price = {
 'banana' : 3,
 'apple' : 2,
 'strawberry' : 6
 }

, и когда я запускаю цикл как следующий:

 for i in price:
   print i

мой вывод получается в таком порядке:

 strawberry, banana, apple

Я думал, что цикл повторяет массив или список по порядку.Это не относится к словарю?Я ожидал, что результатом будет «банан, яблоко, клубника», поскольку банан - это первый ключ, а клубника - последний ключ в моем словаре.

Что происходит в python2, чего я не понимаю?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Словарь не запоминает порядок, в котором вставляются элементы. Вот почему, когда вы перебираете его, порядок произвольный. OrderedDict, с другой стороны, отслеживает указанный порядок. Синтаксис идентичен использованию обычного словаря, и вам нужно будет импортировать модуль collections. В вашем случае

from collections import OrderedDict

price = OrderedDict()

price['banana'] = 3
price['apple'] = 2
price['strawberry'] = 6

for i in price:
   print(i)

должен дать вам желаемый результат.

Обратите внимание, что даже если вы можете создать обычный словарь и передать его в качестве параметра конструктору OrderedDict(), порядок не будет гарантирован.

0 голосов
/ 14 марта 2019

В Python 2.7, перебор словаря не гарантирует порядок, в котором ключи или значения будут возвращены.

Вы можете использовать OrderedDict , если вам это нужно.

В Python 3.7 порядок, по-видимому, гарантирован , но, если честно, я бы использовал OrderedDict просто для того, чтобы убедиться, что он явно указан для удобства чтения, опять же, если вам это нужно.

...