цикл python, кажется, не следует последовательности? - PullRequest
3 голосов
/ 08 ноября 2010

я чувствую, что здесь упускаю что-то очевидное!

seq = {'a': ['1'], 'aa': ['2'], 'aaa': ['3'], 'aaaa': ['4'], 'aaaaa': ['5']}
for s in seq:
    print s

выводит:

a
aa
aaaa
aaaaa
aaa

когда, конечно, должно получиться:

a
aa
aaa
aaaa
aaaaa

чточто-то не так?

спасибо:)

Ответы [ 3 ]

15 голосов
/ 08 ноября 2010

Словари не заказываются.Если вам нужно полагаться на порядок, вам нужен OrderedDict - он есть в модуле collections в Python 2.7, или вы можете использовать один из множества рецептов.

5 голосов
/ 08 ноября 2010

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

Если вы хотите, чтобы ваши ключи были возвращены в порядке , в котором вы создаете ключи , выможно использовать OrderedDict из collections.

В качестве альтернативы, если вы хотите, чтобы ваш вывод был отсортирован по значениям ключей , то будет сделано следующее:

for s in sorted(seq):
    print s
1 голос
/ 08 ноября 2010

почему вы этого не делаете ( словарь не упорядочен ):

for s in range(5):
    print 'a'*s

Редактировать: нормально, как вы:)

дело в выражении: 'a'*s, что означает создание новой строки, содержащей s время 'a'.

в интерпретаторе Python вы можете поиграть с ним (не удивительно, Python :))

>>> print 'a'*2
aa
>>> print 'a'*3
aaa 

PS: если вы новичок в Python, я предлагаю вам использовать ipython , если вы еще не используете его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...