【问题标题】:How do I sort a list of dictionaries by a value within a nested dictionary?如何按嵌套字典中的值对字典列表进行排序?
【发布时间】:2022-01-27 11:31:55
【问题描述】:

我有一个字典列表,其中一个值也是字典。在 python 中,我想按嵌套字典中的值对父列表进行排序。

示例:我需要按照 ['info']['a'] 的值从大到小对 my_list 进行排序。

my_list = [
    {
        "name" : "name1",
        "info" : {
            "a" : 1,
            "b" : 2,
            "c" : 3
        }
    },
    {
        "name" : "name2",
        "info" : {
            "a" : 3,
            "b" : 2,
            "c" : 1
        }
    },
    {
        "name" : "name3",
        "info" : {
            "a" : 2,
            "b" : 3,
            "c" : 4
        }
    }
]

到目前为止,我让它工作的最有效方法是将 ['info']['a'] 的值复制到父字典中的新键/值并根据该新值进行排序。

for d in my_list:   
    d.update({"info_a": d['info']['a']})

sorted_list = sorted(my_list, key=itemgetter('info_a'), reverse=True)

我让它工作的另一种方法是从某些键创建一个全新的字典列表,对其进行排序,然后使用它将字典一个一个地添加到一个新列表中。这似乎不必要地复杂和低效。

temp_list = []
sorted_list = []

for d in my_list:
    entry = {}
    entry.update({"name" : d['name'],
                    "info_a" : d['info']['a']})
    temp_list.append(entry)

for temp_d in sorted(temp_list, key=itemgetter('a'), reverse = True):
    for d in my_list:
        if temp_d['name'] == d['name']:
            sorted_list.append(d)

肯定有某种方法可以按嵌套值排序,而不必创建新对象?

【问题讨论】:

  • output = sorted(my_list, key=lambda dct: dct['info']['a'], reverse=True) 不好吗?

标签: python sorting dictionary


【解决方案1】:

你可以自己写key——没什么大不了的:

sorted_list = sorted(my_list, key=lambda val: val["info"]["a"], reverse=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 2019-02-08
    • 2014-05-01
    • 2020-11-11
    • 1970-01-01
    • 2011-02-22
    • 2021-10-27
    相关资源
    最近更新 更多