【问题标题】:Sorting by value and key按值和键排序
【发布时间】:2023-03-09 20:12:01
【问题描述】:

我正在寻找一些东西来按 Python 中的值和键对列表进行排序。我发现了这个:

list.sort(key=lambda (k, v): (-v, k))

这个 lambda 函数是如何工作的?

【问题讨论】:

  • 那么您有什么疑虑,您做了什么来澄清这些疑虑?例如,您是否尝试过在解释器中对其进行测试?
  • 您要在keyvalue 上对字典进行排序?
  • 我想按值对列表进行排序,然后对具有相同值的列表进行键排序。我不明白的是 -v 因为我在没有 - 的情况下尝试了这个,在我看来,列表仅按值排序。

标签: python sorting dictionary


【解决方案1】:

它通过一对值对列表进行排序。由于它正在对列表进行排序,因此没有任何键值对,而是彼此相邻的两个值。 它的写法是按倒数第二个值排序,然后按正常升序按第一个值排序。

这里是演示:

l1 = [[2,2],[3,1],[1,2],[4,1]]

l1.sort(key=lambda(k,v):(-v,k))

l1
=> [[1, 2], [2, 2], [3, 1], [4, 1]]

【讨论】:

    【解决方案2】:

    更正。 list 不包含 keyvalue 对中的值。 key: value 对存在于字典中。下面是字典排序的值和键的代码:

    >>> d = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4}
    >>> sorted(d.iteritems(), key=lambda(k, v): (-v, k))
    [('peach', 4), ('banana', 3), ('beetroot', 3), ('almond', 2), ('apple', 2)]
    

    说明: d.iteritems() 返回一个 iterator 对象。在sorted(d.iteritems(), key=lambda(k, v): (-v, k)) 中,key=lambda(k, v): (-v, k) 表示首先按照 value 的降序排序,即-v,然后是 key 的升序排序,即 k

    问题中提到的排序列表的代码也适用相同的逻辑。

    【讨论】:

    • ​​​​​​​​​​​​​​​我认为OP想要一个解释-而不是演示。
    • 用解释更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 2023-03-20
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多