Кажется, что цикл python не соответствует последовательности?

Я чувствую, что мне не хватает чего-то очевидного здесь!

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

что здесь не так?

спасибо:)

Ответ 1

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

Ответ 2

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

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

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

for s in sorted(seq):
    print s

Ответ 3

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

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

Изменить: ok, так как вы:)

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

в интерпретаторе python вы можете играть с ним (не питон замечательный:))

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

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