循环似乎不按顺序进行

6 投票
3 回答
829 浏览
提问于 2025-04-16 06:44

我感觉我这里好像漏掉了什么明显的东西!

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 个回答

1

为什么你不这样做(字典是无序的):

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,如果你还没用过的话。

5

标准的Python字典是无序的:这意味着你不能保证键(key)返回的顺序。

如果你想要键按照你创建的顺序返回,可以使用来自 collectionsOrderedDict

另外,如果你想根据键的 来排序输出,可以使用下面的方式:

for s in sorted(seq):
    print s
15

字典是没有顺序的。如果你需要保持顺序,就得用有序字典(OrderedDict)。在Python 2.7的collections模块里就有这个东西,或者你也可以找一些其他的做法来实现。

撰写回答