Полный пример для моего комментария
list.sort(reverse=True, key = lambda x: (x.rank, x.distance))
должно работать - если последовательный x.rank равен, он будет сортировать по возрастанию по возрастанию - проблема в том, что: расстояние до чего ... вы не можетеделать относительные расстояния между точками - больше похоже на общее расстояние каждой точки по отношению к центру (0,0) [т.е. предварительно вычисленное расстояние ...]
class p:
def __init__(self, r, d):
self.rank = r
self.distance = d
def __str__(self):
return f'{self.rank}|{self.distance}'
def __repr__(self):
return str(self)
ranks = [1,2,3]
distances = [10,30,10]
data = [p(r,d) for r in ranks for d in distances]
print(data)
# sort by max rank, min distance
data.sort(key=lambda x:(-x.rank, x.distance))
print(data)
Вывод:
# created data
[1|10, 1|30, 1|10, 2|10, 2|30, 2|10, 3|10, 3|30, 3|10]
# sorted by max rank, min distance
[3|10, 3|10, 3|30, 2|10, 2|10, 2|30, 1|10, 1|10, 1|30]