如何按字典中的某个值对字典列表进行排序?

11

可能是重复问题:
在 Python 中,如何按字典的值对字典列表进行排序?

我正在编写一个 Python 3.2 应用程序,并拥有一个包含以下内容的字典列表:

teamlist = [{ "name":"Bears", "wins":10, "losses":3, "rating":75.00 },
            { "name":"Chargers", "wins":4, "losses":8, "rating":46.55 },
            { "name":"Dolphins", "wins":3, "losses":9, "rating":41.75 },
            { "name":"Patriots", "wins":9, "losses":3, "rating": 71.48 }]

我希望按照评分关键字中的值对列表进行排序。我该如何实现?


我之前回答过一个类似的问题,感觉还是挺有趣的(http://stackoverflow.com/a/11732149/748858)。我当时深入讨论了排序算法,所以我会在这里留下一个链接,希望对你有所帮助。 - mgilson
3个回答

6
使用operator.itemgetter作为关键字:
sorted(teamlist, key=operator.itemgetter('rating'))

你知道使用operator.itemgetter是否比我在答案中使用的lambda键有任何优势吗? - Brendan Wood
谢谢,这样做就可以了。比我以前尝试使用lambda和maps的方法容易多了。 - user338413
@BrendanWood -- 有些人不喜欢使用lambda。此外,operator.itemgetter 稍微 更快--但在普通情况下,可能不值得担心。 - mgilson
@mgilson -- 谢谢,我总是喜欢学习更快捷的方法。 - Brendan Wood
@BrendanWood 它们是等效的,尽管 itemgetter 在您想要按多个键排序时具有优势(您可以编写 itemgetter(key1, key2, ...))。我认为它主要存在是因为 Guido 不喜欢 lambda。 - ecatmur

4
您可以使用带有排序键的sorted函数,该排序键指向您所需的任何字段。
teamlist_sorted = sorted(teamlist, key=lambda x: x['rating'])

我之前在一个应用程序中使用过这个,但是这次我一直收到语法错误的提示。不知道是因为我在这个应用程序中使用了3.2的原因。 - user338413
@user338413:在3.2版本中这是完全有效的。你可能做了些微不同的事情。 - DSM
是的,我刚在3.2中试了一下,对我来说很好用。 - Brendan Wood

1
from operator import itemgetter
newlist = sorted(team_list, key=itemgetter('rating')) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接