Как отсортировать список словарей по длине списка в каждом словаре? - PullRequest
0 голосов
/ 19 февраля 2019

Я работаю над API на основе GoT.Я получил список словарей (каждого символа), которые содержат различные значения на основе ключей.

Я пытаюсь отсортировать весь список по длине списка «заголовков» в порядке убывания.Это помогло бы мне более эффективно получить десятку символов с наибольшим количеством названий.Как бы я реализовать это с помощью метода сортировки в Python 3?

Приведенный ниже код представляет собой небольшой фрагмент того, как выглядит список словарей символов.Как видите, у меня есть два словаря в списке, и в каждом словаре ключ «заголовок» имеет значение списка строк.В этом случае Алисса Веларион имеет больше заголовков, чем Джон Сноу, в зависимости от длины списка «заголовков».

[ #List of Characters

    { #Start of Jon Snow's Dictionary
        "name": "Jon Snow",
        "titles": [
            "Lord Commander of the Night's Watch"
        ]#List of titles 
    } #End of Jon Snow's Dictionary

    { #Start of Alyssa Velaryon's Dictionary
        "name":"Alyssa Velaryon",
        "titles":["Lady","Queen","Dowager Queen","Queen
            Regent", "Lady of Storm's End"]# List of titles
    } #End of Alyssa Velaryon's Dictionary

]#End of Character List

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019
def reverse_len_of_titles(d):
    return -len(d['titles'])

character_list.sort(key=reverse_len_of_titles)

Используя "клавишу" функции сортировки, это довольно просто.Обратите внимание на - в порядке убывания.

0 голосов
/ 19 февраля 2019

Другой вариант с использованием встроенной функции sorted, пусть исходный список будет таким:

res = sorted(list_of_chars, key=lambda x: len(x['titles']), reverse=True )
print(res)

#=> [{'name': 'Alyssa Velaryon', 'titles': ['Lady', 'Queen', 'Dowager Queen', 'QueenRegent', "Lady of Storm's End"]}, {'name': 'Jon Snow', 'titles': ["Lord Commander of the Night's Watch"]}]
0 голосов
/ 19 февраля 2019

Предоставить соответствующую функцию ключа сортировки, например:

list_of_chars.sort(key=lambda d: len(d.get('titles', [])), reverse=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...