我正在尝试建立基于内容的推荐系统。
我创建了这个对象,它是一个包含字符串和元组列表的元组。列表中的每个元组都是一个分数值和项目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')])
答案 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()。