如何根据每个词典中列表的长度对词典列表进行排序?

时间:2019-02-19 16:30:09

标签: python list sorting dictionary

我正在研究基于GoT的API。我已经检索了一个字典列表(每个字符),这些字典包含基于键的不同值。

我正在尝试按照“标题”列表的长度以降序对整个列表进行排序。这将帮助我更有效地检索标题最多的前十个字符。如何在Python 3中使用排序方法来实现此目的?

下面的代码是字符词典列表外观的一小段。如您所见,列表和每个词典中都有两个字典,键“ title”具有字符串列表的值。在这种情况下,基于“标题”列表的长度,Alyssa Velaryon比Jon Snow具有更多标题。

[ #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 :(得分:1)

提供适当的排序键功能,例如:

list_of_chars.sort(key=lambda d: len(d.get('titles', [])), reverse=True)

答案 1 :(得分:0)

def reverse_len_of_titles(d):
    return -len(d['titles'])

character_list.sort(key=reverse_len_of_titles)

使用排序功能的“键”非常简单。请注意-的降序。

答案 2 :(得分:0)

使用内置函数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"]}]