循环似乎不遵循顺序。

6

我感觉我在这里漏掉了一些显而易见的东西!

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
重复的问题链接:https://dev59.com/EHRB5IYBdhLWcg3weHLx 和 https://dev59.com/8XRB5IYBdhLWcg3wl4Oc - jargalan
3个回答

15

字典是无序的。如果您需要依赖顺序,您需要一个有序字典 - Python 2.7中的collections模块中有一个,或者您可以使用周围的许多配方之一。


1
你可能还想指出,OrderedDict 不是一个排序字典。OrderedDict 只是保留了添加键的顺序。 - Steven Rumbalski

5

标准 Python 字典是无序的:不能保证按照哪种顺序返回键。

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

或者,如果你想按照键的值对输出进行排序,可以使用以下方法:

for s in sorted(seq):
    print s

同样的顺序(在这种情况下)也可以通过键的长度轻松排序 for s in sorted(seq, key=len): - John La Rooy

1

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

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

编辑:好的,随你便 :)

问题在于表达式:'a'*s,它的意思是创建一个新字符串,其中包含 s 次 'a'。

在 Python 解释器中,您可以尝试一下(Python 真是太棒了 :))

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

提示:如果你是 Python 的新手,我建议你使用 ipython(如果你还没有使用过的话)。


对于s在范围1到序列长度之间: 打印 'a'* s - significance
顺便问一下,你能为我解释一下吗?我是 Python 新手,不太明白 'a'*s 这部分的含义。 - significance
@significance: 如果在Python中用一个整数乘以一个字符串,那么字符串就会被重复相应的次数(这适用于python中的任何序列)。 - Björn Pollex
哈哈,是的,我刚刚弄明白了,不完全是我想要的! - significance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接