Отсортируйте список dicts значениями dict

У меня есть список словарей:

[{'title':'New York Times', 'title_url':'New_York_Times','id':4},
 {'title':'USA Today','title_url':'USA_Today','id':6},
 {'title':'Apple News','title_url':'Apple_News','id':2}]

Я хотел бы отсортировать его по заголовку, таким образом, элементы с A идут прежде Z:

[{'title':'Apple News','title_url':'Apple_News','id':2},
 {'title':'New York Times', 'title_url':'New_York_Times','id':4},
 {'title':'USA Today','title_url':'USA_Today','id':6}]

Что лучший способ состоит в том, чтобы сделать это? Кроме того, есть ли способ гарантировать, что порядок каждого ключа словаря остается постоянным, например, всегда заголовок, title_url, затем идентификатор?

17
задан ensnare 27 May 2010 в 01:16
поделиться

4 ответа

l.sort(key=lambda x:x['title'])

Для сортировки с помощью нескольких ключей, предполагая, что все в порядке возрастания:

l.sort(key=lambda x:(x['title'], x['title_url'], x['id']))
20
ответ дан 30 November 2019 в 11:26
поделиться

Гипоаллергенная альтернатива для тех, кто чихает при приближении лямбдами:

import operator
L.sort(key=operator.itemgetter('title','title_url','id'))
19
ответ дан 30 November 2019 в 11:26
поделиться
originalList.sort(lambda d1, d2: cmp(d1['title'], d2['title']))

Хотя сортировка только по заголовку и порядку после этого не определена. Таким образом, выполнение нескольких уровней было бы болезненным.

-1
ответ дан 30 November 2019 в 11:26
поделиться

Вызов .sort (fn) в списке, где fn - это функция, которая сравнивает значения заголовков и возвращает результат сравнения.

mylist.sort(lambda x,y: cmp(x['title'], y['title']))

Однако в более поздних версиях Python (2.4+) гораздо лучше использовать просто ключ сортировки:

mylist.sort(key=lambda x:x['title'])

Кроме того, словари гарантированно сохранят свой порядок, если вы будете перебирать ключи / значения, пока дополнений / удалений больше нет. Однако, если вы добавляете или удаляете предметы, все ставки отключены, на это нет никаких гарантий.

2
ответ дан 30 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: