如何对里面有列表的元组进行排序?

时间:2018-07-06 08:30:48

标签: python tuples

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

我创建了这个对象,它是一个包含字符串和元组列表的元组。列表中的每个元组都是一个分数值和项目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')])

4 个答案:

答案 0 :(得分:2)

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

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 :(得分:1)

如果元组被命名为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')])

答案 2 :(得分:0)

给出输入元组T

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

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

答案 3 :(得分:0)

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

t[1].sort()

但是在这种情况下,您希望从高到低排序,所以您需要

t[1].sort(reverse=True)

之所以有用,是因为分数是列表中每个元组的第一个元素。如果不是这样,则还必须将适当的key函数传递给sort()。