【问题标题】:How to sort a list of nested dictionaries with different keys如何对具有不同键的嵌套字典列表进行排序
【发布时间】:2021-03-26 00:01:59
【问题描述】:

我有以下清单:

mylist = [
   { 'frame': { 'aaa': 50 } },
   { 'frame': { 'bbb': 12 } },
   { 'frame': { 'ccc': 23 } },
   { 'frame': { 'ddd': 72 } }
]

我希望使用 不同 键 'aaa'、bbb'、'ccc' 等根据这些整数值对列表进行排序。

我已经看到了这个question,但是这个问题的关键是一致的。

非常感谢任何帮助!

编辑:我想要的输出是:

sorted_list = [
       { 'frame': { 'ddd': 72 } },
       { 'frame': { 'aaa': 50 } },
       { 'frame': { 'ccc': 23 } },
       { 'frame': { 'bbb': 12 } }
]

【问题讨论】:

  • 字典总是只有一个键/值对吗?如果是这样,请按values() 中的第一项排序。
  • 我不明白。此输入的预期结果是什么?你会关心嵌套字典中的哪个键/值对,你怎么知道的?
  • @MarkM 是的。在我的例子中,键是“框架”,它的值是字典。
  • 无论如何,方法与链接答案中的方法相同。您需要能够编写一个函数,告诉您与mylist 的每个项目对应的值,然后您将使用key= 根据这些值进行排序。
  • "在我的例子中,键是'frame',它的值是字典"否;我们说的是作为值的字典

标签: python list sorting dictionary


【解决方案1】:
mylist = sorted(mylist, key=lambda k: -list(k["frame"].values())[0])
print(mylist)

打印:

[{'frame': {'ddd': 72}}, 
 {'frame': {'aaa': 50}}, 
 {'frame': {'ccc': 23}}, 
 {'frame': {'bbb': 12}}]

【讨论】:

  • 您也可以在sorted 调用中使用reverse=True,而不是否定lambda 返回的值。喜欢:sorted(mylist, key=lambda k: list(k["frame"].values())[0], reverse=True)。这样做的好处是它也适用于计算非数字(但仍可排序)结果(例如字符串)的key 函数。
【解决方案2】:

您可以将sortedlambda 一起用于key,它只返回存储在dict'frame' 键下的第一个值。

我们通过使用nextiter 获得第一个值。这样可以避免创建新的 list 对象。

我们还将reverse 参数作为True 传递,因此我们首先获得最大的数字。 :

>>> mylist = [
...    { 'frame': { 'aaa': 50 } },
...    { 'frame': { 'bbb': 12 } },
...    { 'frame': { 'ccc': 23 } },
...    { 'frame': { 'ddd': 72 } }
... ]

>>> sorted(mylist, key=lambda d: next(iter(d['frame'].values())), reverse=True)
[{'frame': {'ddd': 72}},
 {'frame': {'aaa': 50}},
 {'frame': {'ccc': 23}},
 {'frame': {'bbb': 12}}]

【讨论】:

    【解决方案3】:

    对该问题的答案稍作调整,您就会得到这个有效的答案。

    sorted_list = sorted(mylist, key=lambda k: k['frame'][list(k['frame'].keys())[0]], reverse=True)
    

    基本上它只是进入列表,然后按值排序。将 reverse 设置为 True 以使其反转列表。

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多