chore: separate function
This commit is contained in:
+21
-8
@@ -22,15 +22,30 @@ def sort_by_rule(data, sort_by, limit):
|
|||||||
return sorted_data
|
return sorted_data
|
||||||
|
|
||||||
|
|
||||||
|
def sort_limit(data, limit):
|
||||||
|
"""
|
||||||
|
排序和限制
|
||||||
|
[::reverse][:end]
|
||||||
|
"""
|
||||||
|
if limit is None:
|
||||||
|
end = len(data)
|
||||||
|
reverse = 1
|
||||||
|
else:
|
||||||
|
end = abs(limit)
|
||||||
|
reverse = 1 if limit > 0 else -1
|
||||||
|
|
||||||
|
return data[::reverse][:end]
|
||||||
|
|
||||||
|
|
||||||
def sort_by_time(data, limit=30):
|
def sort_by_time(data, limit=30):
|
||||||
"""
|
"""
|
||||||
按时间排序
|
按时间排序
|
||||||
"""
|
"""
|
||||||
sorted_data = sorted(data, key=lambda x: x["time"], reverse=True)
|
sorted_data = sorted(data, key=lambda x: x["time"], reverse=True)
|
||||||
return sorted_data[:limit] if limit > 0 else sorted_data[::-1][: abs(limit)]
|
return sort_limit(sorted_data, limit)
|
||||||
|
|
||||||
|
|
||||||
def sort_by_id(data, limit=True):
|
def sort_by_id(data, limit=None):
|
||||||
"""
|
"""
|
||||||
按学号排序,取对应的最高分,若分数相同则取最短运行时间
|
按学号排序,取对应的最高分,若分数相同则取最短运行时间
|
||||||
"""
|
"""
|
||||||
@@ -46,11 +61,7 @@ def sort_by_id(data, limit=True):
|
|||||||
unique_students.append(score)
|
unique_students.append(score)
|
||||||
unique_students_id_name.add(f"{score['name']}@{score["id"]}")
|
unique_students_id_name.add(f"{score['name']}@{score["id"]}")
|
||||||
|
|
||||||
return unique_students[
|
return sort_limit(unique_students, limit)
|
||||||
: len(unique_students) if limit == True else abs(limit) : (
|
|
||||||
1 if limit > 0 else -1
|
|
||||||
)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def sort_by_score(data, limit=10):
|
def sort_by_score(data, limit=10):
|
||||||
@@ -67,4 +78,6 @@ def sort_by_score(data, limit=10):
|
|||||||
if student_id not in best_scores_by_id:
|
if student_id not in best_scores_by_id:
|
||||||
best_scores_by_id[student_id] = score
|
best_scores_by_id[student_id] = score
|
||||||
|
|
||||||
return list(best_scores_by_id.values())[:: 1 if limit > 0 else -1][: abs(limit)]
|
scores = list(best_scores_by_id.values())
|
||||||
|
|
||||||
|
return sort_limit(scores, limit)
|
||||||
|
|||||||
Reference in New Issue
Block a user