在Python中对元组列表进行排序,其中元组是列表
几乎有人问过类似的问题,但我的问题略有不同。假设我有一个流动列表:在Python中对元组列表进行排序,其中元组是列表,python,list,sorting,tuples,Python,List,Sorting,Tuples,几乎有人问过类似的问题,但我的问题略有不同。假设我有一个流动列表: my_list = [('a', [0.2, 0.28, 0.3]), ('b', [-0.09, 0.37, 0.4])] 我试图根据元组的第二个元素,即0.28和0.37降序,对这个列表进行排序。这是我到目前为止所知道的,但这是不对的 import operator my_list.sort(key = operator.itemgetter(1), reverse = True) print(my_list) [('a'
my_list = [('a', [0.2, 0.28, 0.3]), ('b', [-0.09, 0.37, 0.4])]
我试图根据元组的第二个元素,即0.28和0.37降序,对这个列表进行排序。这是我到目前为止所知道的,但这是不对的
import operator
my_list.sort(key = operator.itemgetter(1), reverse = True)
print(my_list)
[('a', [0.2, 0.28, 0.3]), ('b', [-0.09, 0.37, 0.4])]
我可以想出一种效率不高的方法,但我正在处理一个大型数据集,并试图尽可能提高效率。谢谢您可以:
my_list.sort(key=lambda x: x[1][1], reverse=True)
你为什么得到你的输出
operator.itemgetter1只是作为列表的每个元组的第二个元素,而不是该列表的第二个元素。您向排序函数传递了错误的键
您必须索引上面代码中的两倍。首先索引以获取元组内的列表,然后索引列表以获取列表的第二个元素。例如,列表[0.2,0.28,0.3]是元组“a”的元素1,[0.2,0.28,0.3]位于排序的顶层。要基于0.28进行排序的是其中的元素1;因此,您希望根据索引对数据进行排序,如[1][1]。operator.itemgetter不会执行类似的多个索引步骤,但您可以手动定义它:
my_list.sort(key=lambda element:element[1][1], reverse=True)
您没有按元组的第二个元素进行排序。您正在按元组的第二个元素的第二个元素进行排序。只需使用my_list.sortkey=lambda x:x[1][1]您是要对整个列表还是每个子列表中的元组进行排序?元组本身不能排序,它们是不可变的。