我需要按降序排列列表中的列表。如果数字相同,我必须按字母顺序(增加)订购。
例如,如果我有以下列表:
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]]
我已经搜索了这个,但我只能找到如何订购列表。这里的问题是,当数字相同时,我必须按字母顺序排序。所以顺序首先是数字(我已经达到了),然后我必须在数字相同时订购它,但是字母表。
答案 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