【问题标题】:Sorting Key in Python3 [duplicate]Python3中的排序键[重复]
【发布时间】:2019-12-31 19:31:50
【问题描述】:

我有一个列表列表为myList = [['a',1],['b',4],['a',5], ['b',6]]。我想按字母顺序对列表进行排序,第一个元素作为键,我可以将其更改为myList.sort(key=lambda x:x[0]),它将myList 更改为[['a', 1], ['a', 5], ['b', 4], ['b',6]]。但是如果内部列表的第一个元素相同,我想按内部列表的第二个元素的降序对其进行排序,并得到结果为[['a', 5], ['a', 1], ['b', 6], ['b',4]]。更清洁的方法是什么?我本可以在 Javascript 中做到这一点,因为

myList.sort((a,b) => {
    if(a[0] == b[0]){
        return b[1] > a[1]
    } else {
        return b[0] < a[0]
    }
})

如何在 python 中实现这一点?

【问题讨论】:

  • 但是[...['b', 4], ['b', 6]] 没有遵循您提到的内容。应该是[...['b', 6], ['b', 4]]吧?
  • 答案在文档中:wiki.python.org/moin/HowTo/Sorting 提示:可能最好使用 lambda 函数来提高可读性
  • myList.sort(key=lambda x: (x[0],-x[1])) 应该这样做
  • @hygull 感谢您指出错误。我希望它是 [...['b', 6], ['b', 4]] 已编辑

标签: python python-3.x list sorting lambda


【解决方案1】:

使用元组作为键:

myList.sort(key=lambda x:(x[0], -x[1]))

# myList = [['a', 5], ['a', 1], ['b', 6], ['b', 4]]

【讨论】:

  • 关键是一个 lambda 函数,它返回一个排序的元组。首先比较最左边的元素;如果它们相等,则为第二个,依此类推。 - 对特定的数字“列”进行降序而不是升序排序。
猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
相关资源
最近更新 更多