【问题标题】: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 }]

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

【问题讨论】:

  • 不久前我回答了一个类似的问题(stackoverflow.com/a/11732149/748858)。我对排序进行了相当深入的讨论,所以我会在这里留下一个链接,希望它会有所帮助。

标签: python list sorting dictionary


【解决方案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 .
    猜你喜欢
    • 2011-02-22
    • 2010-09-09
    • 2010-11-15
    相关资源
    最近更新 更多