2013-11-08 3 views
-1

Я пишу программу, которая отображает список футбольных игр, и выводит в турнирной таблице турнирную таблицу. Я проделал большую часть работы по разбору, но борюсь с этим.Сортировка предметов по нескольким критериям

Критерии сортировки заключаются в следующем: A) Команда с большинством баллов. B) Команда с наименьшим количеством игр. C) Команда с большинством побед. D) Команда с максимальным дифференциалом цели. E) Команда с большинством забитых мячей. F) Алфавитный порядок.

Мой код дает мне словарь, созданный из всех входных игр, в следующей форме:

{'Cagliari': [3, 1, 0, 0, 2, 1, 1, 1], 'Torino': [0, 0, 0, 1, 1, 2, -1, 1], 
'Lazio': [3, 1, 0, 0, 4, 2, 2, 1], 'AC Milan': [1, 0, 1, 0, 1, 1, 0, 1], 
'Napoli': [0, 0, 0, 1, 2, 4, -2, 1], 'Inter Milan': [1, 0, 1, 0, 1, 1, 0, 1]} 

Где каждый ключ: значение пара находится в определенном порядке:

'Team' : [points, wins, ties, losses, goals for, goals against, goal differential, 
games played] 

Мой вопрос есть, как я сортирую на основе этих нескольких критериев?

+0

[Сортировка Мини-КАК] (https://wiki.python.org/moin/HowTo/Sorting/) –

ответ

1
>>> teams = {'Cagliari': [3, 1, 0, 0, 2, 1, 1, 1], 'Torino': [0, 0, 0, 1, 1, 2, -1, 1], 
... 'Lazio': [3, 1, 0, 0, 4, 2, 2, 1], 'AC Milan': [1, 0, 1, 0, 1, 1, 0, 1], 
... 'Napoli': [0, 0, 0, 1, 2, 4, -2, 1], 'Inter Milan': [1, 0, 1, 0, 1, 1, 0, 1]} 
>>> sorted(teams, key=lambda t : (teams[t][0], teams[t][-1]*-1, teams[t][1], teams[t][-2], teams[t][4], t)) 
['Napoli', 'Torino', 'AC Milan', 'Inter Milan', 'Cagliari', 'Lazio'] 
+0

Алфавитный тай-брейк, кажется, не работает, но если я могу найти путь к понять этот тип рода, я уверен, что смогу это исправить. – idalsin

+1

@idalsin: кортеж в выражении 'lambda', поместите в него все ваши критерии. Более важные критерии слева от менее важных критериев. Кроме того, если вы хотите отсортировать по некоторому критерию в порядке убывания, умножьте его на '-1' – inspectorG4dget

Смежные вопросы