Python: сортировать вложенный словарь - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть вложенный словарь типа, следующего за

{id_1 : [ {id_2:score},{id_3:score_2} .... and so on],id_2 :[{id_1:Score_!....]}

, поэтому, по сути, вложенный словарь Теперь я хочу отсортировать этот словарь по первичному идентификатору на основе оценки, поэтому в основном

{id_1: [{element with max_score},{element_with next max_score....}]... id_2:[{element_with max_score},{element_with next maxx score}...]

также, функция должна принимать аргумент say (n), который возвращает верхние n совпадений или, если n <количество элементов этого идентификатора, тогда она возвращает полный список любых идей / мыслей. Спасибо </p>

1 Ответ

3 голосов
/ 21 ноября 2011

Вы можете использовать параметр key для list.sort().Предполагая, что внешний словарь называется d, код может выглядеть следующим образом:

for scores in d.itervalues():
    scores.sort(key=lambda x: next(x.itervalues()), reverse=True)

Функция lambda просто извлекает единственное значение словаря.

Я думаю, что вы будетелучше использовать кортежи вместо словарей в качестве значений вашего списка:

{id_1: [(id_2, score_2), (id_3, score_3),...], id_2: [(id_1, score_1),...]}

Используя эту структуру данных, код сортировки будет

for scores in d.itervalues():
    scores.sort(key=lambda x: x[1], reverse=True)

или эквивалентно, но немного быстрее

for scores in d.itervalues():
    scores.sort(key=operator.itemgetter(1), reverse=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...