我正在研究基于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
答案 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"]}]