我想知道用两个键对元组列表进行排序的Pythonic方法是什么,其中用一个(并且只有一个)键进行排序将是相反的顺序,而用另一个键进行排序将不区分大小写.更具体地说,我有一个包含元组的列表:
myList = [(ele1A, ele2A),(ele1B, ele2B),(ele1C, ele2C)]
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码用两个键对其进行排序:
sortedList = sorted(myList, key = lambda y: (y[0].lower(), y[1]))
Run Code Online (Sandbox Code Playgroud)
要按相反顺序排序,我可以使用
sortedList = sorted(myList, key = lambda y: (y[0].lower(), y[1]), reverse = True)
Run Code Online (Sandbox Code Playgroud)
但这会按两个键的相反顺序排序.
任何提示都非常感谢.
当我们想要对元组列表进行排序时,每个元组的长度都是 3(全部递增),我们对以下代码进行修改
ts = [(7, 14, 5), (3, 12, 9), (20, 22, 8), (20, 23, 24), (3, 12, 8), (4, 5, 7), (4, 5, 6), (4, 22, 17)]
ts.sort(key=lambda t: (t[0], t[1], t[2]))
Run Code Online (Sandbox Code Playgroud)
我的意思是,最初比较位置零的元素,元组中的零元素越低,它越接近开头。如果两个元组在位置 0 处具有相同的值,则第二个元素较低的元素将更靠近左侧。如果两个元组具有相同的第二个元素,则考虑元组中的第三个元素。
所以上面代码的输出是
Output: [(3, 12, 8), (3, 12, 9), (4, 5, 6), (4, 5, 7), (4, 22, 17), (7, 14, 5), (20, 22, 8), (20, 23, 24)]
Run Code Online (Sandbox Code Playgroud)
但是,如果我想在某些情况下(不是全部)反转顺序,例如比较第一个元素,并且如果一个元组的第一个元素较小,则它在排序列表中的位置较早,该怎么办?但如果第一个元素相同,则第一个元素较大的元组将在列表中靠前。如果元组中的第二个元素相同,则第一个元素较大的元组将在列表中靠前。
这也可以描述为:
首先考虑元组中的第一个元素,按升序对它们进行排序
如果元组中的第一个元素相同,则按降序对它们进行排序
如果元组中的第二个元素相同,则按降序对它们进行排序
所以,我提供的输入应该是
Output: [(3, 12, 9), (3, 12, …Run Code Online (Sandbox Code Playgroud) 假设我有这个元组列表:
[(30, 'B'), (50, 'B'), (40, 'C'), (10, 'A'), (80, 'A'), (5, 'A')]
Run Code Online (Sandbox Code Playgroud)
我需要按元组的第二个元素按降序对元组进行排序,但条件是具有相同第二个元素的所有元组都彼此相邻。
所以,它应该看起来像
[(80, 'A'), (10, 'A'), (5, 'A'), (50, 'B'), (30, 'B'), (40, 'C')]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
如果我有一个元组列表,第一个是数字,第二个是字符串,例如:
[(2, 'eye'), (4, 'tail'), (1, 'scarf'), (4,'voice')]
Run Code Online (Sandbox Code Playgroud)
如何按数字降序排序,如果在任何点都有数字,那么具有相同数字的单词应按字母顺序排序.并返回最终排序的单词.
从我的例子来看:
['tail', 'voice', 'eye', scarf']
Run Code Online (Sandbox Code Playgroud)
我按降序对它们进行了排序,但我不知道如何按字母顺序对它进行分类.很高兴听到任何暗示和回答.谢谢!
def sorting(list)
my_list = []
for x, y in list.items():
my_list+=[(y,x)]
sort=sorted(my_list, reverse=True)
Run Code Online (Sandbox Code Playgroud)