【问题标题】:How to sort a dictionary by key? [duplicate]如何按键对字典进行排序? [复制]
【发布时间】:2013-03-14 21:22:30
【问题描述】:

我尝试按键排序 dict 但没有机会。 这是我的字典:

result={'1':'value1','2':'value2',...}

我正在使用 Python2.7,我发现了这个

keys = result.keys()
keys.sort()

但这不是我所期望的,我有一个未排序的字典。

【问题讨论】:

    标签: python sorting dictionary


    【解决方案1】:

    标准 Python 字典本质上是无序的。但是,您可以使用collections.OrderedDict。它保留了插入顺序,因此您只需按所需顺序添加键/值对:

    In [4]: collections.OrderedDict(sorted(result.items()))
    Out[4]: OrderedDict([('1', 'value1'), ('2', 'value2')])
    

    【讨论】:

    • 如果我有 1000 对 (key, value) 怎么办??
    • 如果我必须将OrderedDict([('1', 'value1'), ('2', 'value2')])value* 倒序排序,该怎么办
    【解决方案2】:
    sorted(result.iteritems(), key=lambda key_value: key_value[0])
    

    这将输出已排序的结果,但字典将保持未排序状态。如果要保持字典的顺序,请使用OrderedDict

    实际上,如果您按 key 排序,则可以跳过 key=... 部分,因为迭代的项目首先按键排序,然后按值排序(NPE 在他的答案中使用)

    【讨论】:

    • 我个人会选择key=lambda (key,val): val),这也是正确的,但恕我直言也更明确
    • @JonClements 在 python 3 中已被弃用,因此当前的方法更好
    • @jamylak:为什么不推荐使用它?有参考吗?
    • @JakubM。它与解包引用有关 - 3.x 系列不允许诸如 def f(somearg, (nextarg, otherarg)) 之类的构造
    【解决方案3】:

    Python 字典是无序的(用于定义)

    您可以改用OrderedDict

    【讨论】:

      猜你喜欢
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2020-08-03
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多