在Python中对嵌套字典列表进行排序

15

我有类似以下的东西:

[
    {
        "key": { "subkey1":1, "subkey2":"a"  }
    },
    {
        "key": { "subkey1":10, "subkey2":"b" }
    },
    {
        "key": { "subkey1":5, "subkey2":"c" }
    }
]

需要实现以下功能:

[
    {
        "key": { "subkey1":10, "subkey2":"b" }
    },
    {
        "key": { "subkey1":5, "subkey2":"c" }
    },
    {
        "key": { "subkey1":1, "subkey2":"a" }
    }
]

非常感谢!

编辑:我想按subkey1排序,之前没有表达清楚。

3个回答

21

使用 key 关键字来调用 sorted() 函数sort() 方法

yourdata.sort(key=lambda e: e['key']['subkey'], reverse=True)

演示:

>>> yourdata = [{'key': {'subkey': 1}}, {'key': {'subkey': 10}}, {'key': {'subkey': 5}}]
>>> yourdata.sort(key=lambda e: e['key']['subkey'], reverse=True)
>>> yourdata
[{'key': {'subkey': 10}}, {'key': {'subkey': 5}}, {'key': {'subkey': 1}}]

假设 所有 顶层字典都有一个名为 key 的键,其值应该是一个带有 subkey 键的字典。

有关更多详细信息和技巧,请参阅Python排序指南


3
假设您希望按照列表中每个字典dd ['key'] ['subkey']的值进行排序,请使用以下代码:
sorted(yourdata, key=lambda d: d.get('key', {}).get('subkey'), reverse=True)

非常感谢您的回答,它在一个非常复杂的嵌套字典列表中起作用了。请鼓掌! - Ezio

-2
sorted(yourdata, reverse=True)

我没有给这个点踩,但你会意识到作为可迭代对象的dict返回的是键,所以你最终不会得到一个有用的列表。 - Jon Clements
不理解。请返回所要求的翻译文本。 - alexvassel
1
@alexvassel:在这个简单的例子中,输出恰好是相同的,但是如果任何一个字典中有额外的键,结果将会非常不同。我没有给你的答案投反对票,但在这一点上它是不正确的。 - Martijn Pieters
有时候会发生的情况是问题的变化,虽然从某种意义上说它是一个有效的答案... 我只是不会担心它... 例如:你发布了一个可行的解决方案,然后突然问题发生了改变...而你的解决方案却不再起作用... 有些人会因为微小的偏差而踩你,而其他人则会评论它为什么不可行(我更喜欢后者)... - Jon Clements

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