【问题标题】:Sort dictionary by multiple values按多个值对字典进行排序
【发布时间】:2016-03-14 05:40:34
【问题描述】:

我有字典{'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}

我需要先对这本字典进行数字排序,然后在其中按字母顺序排序。如果 2 个项目具有相同的数字键,则需要按字母顺序对它们进行排序。

这个的输出应该是Bob, Alex, Bill, Charles

我尝试使用 lambda、列表理解等,但我似乎无法让它们正确排序。

【问题讨论】:

    标签: python sorting dictionary


    【解决方案1】:

    sorted与键功能一起使用(首先按值排序(d[k]),然后键k):

    >>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}    
    >>> sorted(d, key=lambda k: (d[k], k))
    ['Bob', 'Alex', 'Bill', 'Charles']
    

    【讨论】:

    • 如何将一个值降序,另一个值升序?
    • @AlexStewart,对于数值,您可以通过否定 (-) 来控制它的降序。对于非数值,您应该定义带有__lt__ 的子类。
    【解决方案2】:

    使用sorted() 对字典的项目(元组)进行排序。您可以通过字典的值指定排序键,然后是它的键:

    >>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}
    >>> sorted(d.items(), key=lambda x:(x[1],x[0]))
    [('Bob', 3), ('Alex', 4), ('Bill', 4), ('Charles', 7)]
    >>> [t[0] for t in sorted(d.items(), key=lambda x:(x[1],x[0]))]
    ['Bob', 'Alex', 'Bill', 'Charles']
    

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 2017-07-03
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多