2010-11-08 4 views
2

Я чувствую, что мне не хватает чего-то очевидного здесь!Цикл 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 

что происходит здесь не так?

thanks :)

+3

дублируется http://stackoverflow.com/questions/613183/python-sort-a- словарь по значению и http://stackoverflow.com/questions/575819/sorting-a-dictionary-in-python – jargalan

ответ

14

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

+1

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

1

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

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

Edit: хорошо, как вы, которые :)

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

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

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

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

+0

для s в диапазоне (1, len (seq)): \t print 'a' * s – significance

+0

кстати, вы могли бы немного сломать это для меня, я новичок в python и не понимаю «a» * бит. – significance

+0

@significance: Если вы умножаете строку на целое число в python, строка повторяется много раз (это работает для любой последовательности в python). –

5

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

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

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

for s in sorted(seq): 
    print s 
+0

также легко сортировать по длине ключей 'для s в отсортированном (seq, key = len):' (тот же порядок в этом случае, хотя) –

Смежные вопросы