如何按列表升序和下降列表对列表进行排序

时间:2018-05-10 19:44:26

标签: python list sorting

我需要按降序排列列表中的列表。如果数字相同,我必须按字母顺序(增加)订购。

例如,如果我有以下列表:

mylist=[['a', 5], ['l', 2], ['u', 1], ['t', 1], ['q', 1], ['o', 1], ['e', 1]]

输出必须如下:

[['a', 5], ['l', 2], ['e', 1], ['o', 1], ['q', 1], ['t', 1], ['u', 1]]

我已经搜索了这个,但我只能找到如何订购列表。这里的问题是,当数字相同时,我必须按字母顺序排序。所以顺序首先是数字(我已经达到了),然后我必须在数字相同时订购它,但是字母表。

3 个答案:

答案 0 :(得分:0)

您可以使用SELECT COUNT(record_num), userid FROM Newcompanies WHERE userID <> (certain group of userIds) GROUP BY Month keyword-only参数来更改key评估列表中每个元素的方式。在这种情况下,您希望它评估每个子列表的第二个元素,或list.sort

sublist[1]

或使用# don't use `list` as a variable name, it shadows the builtin lst.sort(key=lambda sublst: sublst[1])

operator.itemgetter

答案 1 :(得分:0)

如果我理解正确,你想按第二个元素(数字)降序排序,按第一个元素(字母)按字母顺序升序排序。

这应该得到你想要的东西:

mylist = list=[['a', 5], ['l', 2], ['u', 1], ['t', 1], ['q', 1], ['o', 1], ['e', 1]]
sorted_list = sorted(mylist, key = lambda x:(-x[1], x[0]))
print(sorted_list)
#[['a', 5], ['l', 2], ['e', 1], ['o', 1], ['q', 1], ['t', 1], ['u', 1]]

我们使用key参数sorted来定义如何对列表进行排序。在这种情况下,我们传入一个lambda函数lambda x: (-x[1], x[0])作为关键函数。这里的“技巧”是我们传递x[1]的负数(数字的负数),以便按数字递减排序。元组x[0]的第二个元素是字符,它将用于破坏具有相同数字值的列表元素的关系。

答案 2 :(得分:0)

如果你想变得更复杂,你可以定义一个定义'&lt;'的类。运营商以你想要的方式。然后,您可以将新类的实例列表传递给已排序。或者使用类构造函数生成密钥。

对于这个简单的例子,这似乎有点矫枉过正。

- hosts: "{{my_hosts}}"

vars_prompt:
- name: "my_hosts" 
  prompt: "Enter the hosts" 
  private: no