From f0c080a46f80a9ec81e2d35989a3b2f2c07a9c71 Mon Sep 17 00:00:00 2001 From: shlurbee Date: Wed, 18 Sep 2013 08:39:03 -0700 Subject: [PATCH] Fix secondary sort in recommendations --- r2/r2/lib/recommender.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/r2/r2/lib/recommender.py b/r2/r2/lib/recommender.py index d3eec6d3a..f5b83801e 100644 --- a/r2/r2/lib/recommender.py +++ b/r2/r2/lib/recommender.py @@ -124,8 +124,11 @@ class SRRecommendation(tdb_cassandra.View): for rank, id36 in rank_id36_pairs: ranks[id36].append(rank) recs = [(id36, len(ranks), max(ranks)) for id36, ranks in ranks.iteritems()] - # sort by number of times appeared, then max rank - return sorted(recs, key=itemgetter(1, 2), reverse=True) + # first, sort ascending by rank + recs = sorted(recs, key=itemgetter(2)) + # next, sort descending by number of times the rec appeared. since + # python sort is stable, tied items will still be ordered by rank + return sorted(recs, key=itemgetter(1), reverse=True) def _to_recs(self): recs = self._values() # [ {rank, srid} ]