【问题标题】:Sequential Looping through a Python Dictionary giving problems [duplicate]通过Python字典的顺序循环给出问题[重复]
【发布时间】:2012-05-29 02:47:12
【问题描述】:

可能重复:
In what order does python display dictionary keys?

我试图回答这个非常奇怪的 Python 问题(在 SO 但看起来作者删除了它)。这让我大吃一惊,我似乎无法合理地解释自己是什么原因导致了这种令人困惑的现象。 我有一个 Python 字典(关联数组),初始化如下。

d = {"word1": 1, "word2": 2, "word3": 3}

并使用 for..in 构造循环遍历它,在该构造中我打印由空格分隔的“d”键。 预期输出:word1 word2 word3
实际输出:word1 word3 word2

然后我尝试将“d”打印为

 打印 d 

输出

{'word1': 1, 'word3': 3, 'word2': 2}

我正在扫描在线 Python 文档、SO 上的现有调查问卷、博客,但完全无法找出原因。我在这里错过了什么吗?此外,请所有对此问题投反对票的人详细说明原因。

干杯。 :-)

【问题讨论】:

  • -1。详细说明:您围绕主题跳舞,但您从不说预期输出与实际输出有什么问题。问题在于顺序。 Google 或在 stackoverflow 中搜索“python”、“order”、“dictionary”,很快就能找到答案。
  • @StevenRumbalski:谢谢。我是个笨蛋:(
  • 我投票结束这个问题作为一个完全重复的问题。非常感谢所有愿意在这里发帖/评论的人。 :)

标签: python associative-array


【解决方案1】:

Python 字典中的键没有排序。

for key in sorted(d):
    print key,

按预期打印word1 word2 word3

【讨论】:

    【解决方案2】:

    Python dict 不保证其键的任何特定顺序。

    collections.OrderedDict 保留其键的插入顺序。

    【讨论】:

      【解决方案3】:

      来自文档:

      最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。一对大括号创建一个空字典:{}。在大括号内放置一个逗号分隔的键:值对列表,将初始键:值对添加到字典中;这也是在输出中写入字典的方式。

      字典上的主要操作是存储带有某个键的值并提取给定键的值。也可以使用 del 删除键:值对。如果您使用已在使用的密钥进行存储,则与该密钥关联的旧值将被遗忘。使用不存在的键提取值是错误的。

      字典对象的 keys() 方法以任意顺序返回字典中使用的所有键的列表(如果要对其进行排序,只需对其应用 sorted() 函数)。要检查单个键是否在字典中,请使用 in 关键字。

      http://docs.python.org/tutorial/datastructures.html

      最后一段说明了一切。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-04
        • 2021-04-22
        • 1970-01-01
        • 2023-03-04
        • 2015-12-29
        • 2019-08-11
        • 1970-01-01
        • 2021-11-07
        相关资源
        最近更新 更多