Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对包含列表的元组进行排序?_Python_Tuples - Fatal编程技术网

Python 如何对包含列表的元组进行排序?

Python 如何对包含列表的元组进行排序?,python,tuples,Python,Tuples,我正在尝试建立一个基于内容的推荐系统 我创建了这个对象,它是一个包含字符串和元组列表的元组。列表中的每个元组都是一对分数值和项目id 我不知道如何按分数值排序这个对象 ('100460040', [(0.424943345091376, '100460139'), (0.5341613659423828, '100462023'), (0.2915704982169979, '100464122'), (0.6915704982169979, '100461026')])

我正在尝试建立一个基于内容的推荐系统

我创建了这个对象,它是一个包含字符串和元组列表的元组。列表中的每个元组都是一对分数值和项目id

我不知道如何按分数值排序这个对象

    ('100460040',
 [(0.424943345091376, '100460139'),
  (0.5341613659423828, '100462023'),
  (0.2915704982169979, '100464122'),
  (0.6915704982169979, '100461026')])
这就是我想要得到的结果

        ('100460040',
 [(0.6915704982169979, '100461026'),
  (0.5341613659423828, '100462023'),
  (0.424943345091376, '100460139'),
  (0.2915704982169979, '100464122')])

如果您的元组命名为
tpls
,则可以按如下方式对该元组中的所有列表进行排序

tuple(sorted(t, reverse=True) if type(t) == list else t for t in tpls)
# ('100460040', [(0.6915704982169979, '100461026'), (0.5341613659423828, '100462023'), (0.424943345091376, '100460139'), (0.2915704982169979, '100464122'), (0.2915704982169979, '100461025'), (0.27074189424335177, '100410120'), (0.1915704982169979, '100461066'), (0.10862458037004655, '100490118')])

给定一个输入元组
T

T_sorted = (T[0], sorted(T[1], reverse=True))

我们使用的事实是,元组在Python中是按元素自然排序的。换句话说,排序首先由每个元组的元素0执行,然后由元素1执行,以此类推。

您只需对列表进行排序即可

In [1]: t = ('100460040',
   ...:  [(0.424943345091376, '100460139'),
   ...:   (0.5341613659423828, '100462023'),
   ...:   (0.2915704982169979, '100464122'),
   ...:   (0.6915704982169979, '100461026')])
   ...:   
In [2]: t[1].sort(reverse=True)
In [3]: 
In [3]: t
Out[3]: 
('100460040',
 [(0.6915704982169979, '100461026'),
  (0.5341613659423828, '100462023'),
  (0.424943345091376, '100460139'),
  (0.2915704982169979, '100464122')])

您不需要额外的努力来按每个元组的第一个元素进行排序,因为元组是按字典顺序排序的。如果一对元组的第一个元素相同,则该算法只会查看第二个元素。

嗯,列表是元组中的第二个元素,因此它有索引1。因此,您可以将该列表称为
t[1]
(假设您的元组名为
t
;在实际代码中不是一个好名字)。您可以简单地使用以下方法进行排序:

t[1].sort()
但在这种情况下,您需要从高到低进行排序,因此需要

t[1].sort(reverse=True)

这是因为分数是列表中每个元组的第一个元素。如果不是这样,您还必须传递一个适当的
函数来排序()。

您尝试了什么,它到底有什么问题?通读一下,它有一个与您的问题非常相似的例子。@MarcoFumagalli看着接近的投票,人们似乎不理解这个问题。你可以写“我有这个元组,包含一个元组和一个元组列表。我想按照每个元素的第一个元素对内部列表进行排序”。相反,您希望“按分数和值排序对象”,这一点不太清楚。一些反对票也可能来自那些重视OP最初尝试的人。好吧,我很快意识到这还不清楚。现在我觉得好多了。谢谢@timegb这里不需要
itemgetter
。@timgeb。是的。更新答案。谢谢