2015-11-26 5 views
-2

У меня есть массив словарей:Сортировка списка словарей на определенный ключ словаря

LeaderBoard = [{'Driver':'Sebastian Williams', 'Car':1, 'Team':'Red Drink','Grid':2, 'Fastest Lap':'1:37.481','Race Time':'2:27:45.958','Points':10}, 
        {'Driver':'Tom Hamilton' ,'Car':44 ,'Team':'Mercidas' ,'Grid':6 ,'Fastest Lap':'1:37.176' ,'Race Time':'2:26:52.094' ,'Points':25 }, 
        {'Driver':'Danny Ricardo' ,'Car':3 ,'Team':'Red Drink' ,'Grid':8 ,'Fastest Lap':'1:38.459' ,'Race Time':'2:27:38.589' ,'Points':15 }, 
        {'Driver':'Walter Borras' ,'Car':77 ,'Team':'Lewis' ,'Grid':14 ,'Fastest Lap':'1:38.264' ,'Race Time':'2:27:22.229' ,'Points':18 }, 
        {'Driver':'Fernando Sonal' ,'Car':14 ,'Team':'Farrori' ,'Grid':16 ,'Fastest Lap':'1:38.587' ,'Race Time':'2:27:52.040' ,'Points':8 }, 
        {'Driver':'Jeson Smith' ,'Car':22 ,'Team':'McMilan' ,'Grid':3 ,'Fastest Lap':'1:38.284' ,'Race Time':'2:27:39.484' ,'Points':12},] 

Как отсортировать их в порядке быстрый «Race Time»?

Я пробовал все, что мог придумать. Я использовал replace и split, чтобы сделать расы индивидуальными числами, которые я мог бы легко сравнить, но я не мог заставить петли работать.

Это для домашней работы, где нам нужно использовать алгоритм сортировки, который мы узнали. Использование Python sort или sorted не допускается.

Никаких других ограничений --- любой способ сортировки этого массива словарей будет в порядке.

+0

Использование 'array [0] ['d']> array [1] ['d']' –

+0

Привет, читайте [this] (http://stackoverflow.com/help/how-to-ask), чтобы узнать больше о задании вопросов в SO. – rll

+0

Что вы хотите, чтобы ваш выход был? Словари - это не упорядоченные структуры данных, поэтому сортировка их содержимого не имеет смысла. Может быть, список для каждого уникального ключа? Что-то другое? –

ответ

1

Вы можете использовать sorted с аргументом key.

array = sorted(array,key= lambda x: x['d']) 
+0

Не разрешено для школьной работы, где нам нужно использовать алгоритм сортировки, который мы изучили. –

+0

Хорошо, в этом случае, я думаю, вы должны сами это решить ... – thomas

0

Поскольку вы должны использовать свой собственный код сортировки, большинство ответов на этот сайт не поможет --- они обычно основаны на sort или sorted функций, которые поставляются с Python.

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

if a < b: 
    # swap a and b 

... вы вместо того, чтобы сравнить значения, содержащиеся в этих пунктах:

attribute = 'Race Time' 
if a[attribute] < b[attribute]: 
    # swap a and b 

Обратите внимание, что «время гонки» на самом деле являются строками в некоторых странных формат, который потребует работы для преобразования в сопоставимые номера. Это, вероятно, будет стоит писать в виде отдельной функции, которые ваша функция сортировки будет использовать в одних и тех же местах:

if race_time(a) < race_time(b): 
    ... 

... или даже:

if is_faster(a, b): 
    ... 

Для более общего решения, смотрите up функции компаратора, который используется большинством языков для сортировки общего назначения, и ключевые функции, более эффективный вариант, используемый в современных версиях Python. («How do I sort a list of dictionaries by values of the dictionary in Python?», упомянутый SuperBiasedMan в комментариях, имеет много примеров использования ключевых функций.)

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