【问题标题】:In what order does python display dictionary keys? [duplicate]python以什么顺序显示字典键? [复制]
【发布时间】:2010-12-16 06:49:42
【问题描述】:
>>> D = {'a': 1, 'b': 2, 'c': 3}
>>> D
{'a': 1, 'c': 3, 'b': 2}

我刚刚在 Python shell 中做了这个,我只是想知道为什么键 'c' 会在键 'b' 之后???

【问题讨论】:

    标签: python


    【解决方案1】:

    顺序与它们在内部的工作方式以及它们在哈希表中的最终顺序有关。这又取决于键的哈希值、插入的顺序以及您使用的 Python 实现。

    顺序是任意的(但不是随机的),知道它是什么顺序永远不会有用。

    要获得排序的键列表,只需使用sorted(D),在您的情况下将返回['a', 'b', 'c']

    【讨论】:

    • 如果您想了解字典的工作原理,请观看此视频:us.pycon.org/2010/conference/schedule/event/12
    • 我无法访问上面的链接
    • 我想可能是这个话题:youtube.com/watch?v=C4Kc8xzcA68
    • 我注意到,如果字典的键是数字并以增量方式插入字典。例如 (1,2,3,4,...,10)。它总是产生相同的顺序。这是正确和/或可靠的吗??
    • 这取决于Python版本,所以没有。
    【解决方案2】:

    在 Python 2.7 中,您可以使用 Ordered Dict

    【讨论】:

      【解决方案3】:

      来自the documentation

      最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。

      【讨论】:

      • 谢谢你,我知道字典是无序的。所以python所做的事情只是让我感到困惑,因为它改变了显示顺序。
      • 明确表示顺序可以随时更改。这样可以更快地实现。如果您需要按特定顺序排列的键,您可以对它们进行排序。
      • QQending:无序意味着(除其他外)你得到的顺序可能不是你输入的顺序,那么为什么 pythons 的行为令人困惑?如果您想知道为什么它执行“排序”顺序以外的其他操作,则字典使用哈希表,而不是搜索树。排序可能基于键的哈希值 mod 表的当前大小或同样不可预测的东西。
      • Laurence Gonsalves:感谢您的详细解释。我刚开始学习python,我倾向于把所有事情都弄清楚,所以我发布了这个问题。
      • 上学期我一直在与我的一位讲师争论(或至少悄悄地纠正)关于无序与无序的问题;当她的意思是未分类时,她一直在说未分类。 [1,7,3,2,5] 未排序,但 排序。 setdict 是无序的,listtuple 是有序的(可能会或可能不会排序)。
      【解决方案4】:

      按照它喜欢的任何顺序。这就是字典的本质。如果您想要按特定顺序进行,则必须自己进行:

      >>> d = {'pax': 1, 'george': 2, 'guido' : 3}
      
      >>> d
      {'pax': 1, 'george': 2, 'guido': 3}
      
      >>> [(key,d[key]) for key in sorted(d)]
      [('george', 2), ('guido', 3), ('pax', 1)]
      

      【讨论】:

      • 不完全正确:Lennart 的回答在技术上更正确“顺序是任意的(但不是随机的)”。
      • 我没有提到“随机”,只是字典没有指定顺序。它可以以它认为合适的任何顺序返回它们。它可能会根据内容和操作历史以确定的顺序返回,这一事实绝不会解决您自己排序的责任,如果这是您想要的:“字典对象的 keys() 方法返回所有列表字典中使用的键,以任意顺序(如果要对其进行排序,只需对其应用 sorted() 函数)”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2021-04-12
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多