【问题标题】:Looping seems to not follow sequence循环似乎不遵循顺序
【发布时间】:2011-05-06 14:44:24
【问题描述】:

我觉得我在这里遗漏了一些明显的东西!

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

这里出了什么问题?

【问题讨论】:

标签: python list dictionary for-loop


【解决方案1】:

标准 Python 字典没有排序:无法保证返回键的顺序。

如果您希望按照创建密钥的顺序返回密钥,您可以使用OrderedDict from collections

或者,如果您希望输出按 键的值进行排序,可以使用以下方法:

for s in sorted(seq):
    print s

【讨论】:

  • 也很容易按键的长度排序for s in sorted(seq, key=len):(虽然在这种情况下顺序相同)
【解决方案2】:

你为什么不这样做(字典没有排序):

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

编辑 : 好吧 :)

问题在于表达式:'a'*s,这意味着创建一个包含时间 'a' 的新字符串。

在 python 解释器中你可以玩它(python 不是很棒:))

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

PS:如果你是 python 新手,我建议你使用 ipython 如果你还没有使用它。

【讨论】:

  • for s in range(1,len(seq)): print 'a'*s
  • 顺便说一句,你能帮我把它分解一下吗,我是 python 新手,不明白 'a'*s 位。
  • @significance:如果你在 python 中将一个字符串乘以一个整数,则该字符串会重复多次(这适用于 python 中的任何序列)。
  • 大声笑 - 是的,刚刚解决了这个问题,不完全是我想要的!
  • @significance: 希望这能有所帮助:)
【解决方案3】:

字典没有排序。如果您需要依赖排序,则需要一个 OrderedDict - Python 2.7 的 collections 模块中有一个,或者您可以使用周围的众多配方之一。

【讨论】:

  • 您可能还想指出 OrderedDict 不是排序字典。 OrderedDict 仅保留添加键的顺序。
猜你喜欢
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 2017-02-16
  • 2018-05-29
相关资源
最近更新 更多