如何按字典中的值对字典列表进行排序? [复制]

Posted

技术标签:

【中文标题】如何按字典中的值对字典列表进行排序? [复制]【英文标题】:How can I sort a list of dictionaries by a value in the dictionary? [duplicate] 【发布时间】:2012-08-11 19:43:48 【问题描述】:

可能重复:In Python how do I sort a list of dictionaries by values of the dictionary?

我正在编写一个 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 ]

我希望列表按评级键中的值排序。我该如何做到这一点?

【问题讨论】:

不久前我回答了一个类似的问题(***.com/a/11732149/748858)。我对排序进行了相当深入的讨论,所以我会在这里留下一个链接,希望它会有所帮助。 【参考方案1】:
from operator import itemgetter
newlist = sorted(team_list, key=itemgetter('rating')) 

【讨论】:

【参考方案2】:

您可以将sorted 函数与引用您希望的任何字段的排序键一起使用。

teamlist_sorted = sorted(teamlist, key=lambda x: x['rating'])

【讨论】:

我在以前的应用程序中使用过这个,但这次我一直收到语法错误。不知道是不是因为这个应用我用的是 3.2。 @user338413:这在 3.2 中完全有效。你一定做了一些稍微不同的事情。 是的,我自己在 3.2 中尝试过,对我来说效果很好。【参考方案3】:

使用operator.itemgetter 作为键:

sorted(teamlist, key=operator.itemgetter('rating'))

【讨论】:

您知道使用operator.itemgetter 是否比我在答案中使用的lambda 键有任何优势吗? 谢谢,成功了。比我在使用 lambda 和 maps 之前尝试的旧方法要容易得多。 @BrendanWood -- 有些人不喜欢lambda。此外,operator.itemgetter 的速度快——但是,在常见情况下可能还不够值得担心。 @mgilson -- 谢谢,我一直喜欢学习更快的做事方式。 @BrendanWood 它们是等价的,尽管itemgetter 在您想按多个键排序时具有优势(您可以写itemgetter(key1, key2, ...)。我认为它主要存在,因为 Guido 不喜欢 lambdas .

以上是关于如何按字典中的值对字典列表进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何按值对 Python 字典进行排序? [复制]

当每个字典都有不同的键时,如何按值对字典列表进行排序?

6.3 遍历字典

按字典的值对字典进行排序

按字典值的值对字典进行排序

如何首先根据其单位(bit/s、Kbit/s 等)对特定的字典列表进行排序,然后根据它们的值对它们进行排序