【问题标题】:sorting list of nested dictionaries in pythonpython中嵌套字典的排序列表
【发布时间】:2012-10-25 15:11:47
【问题描述】:

我有类似的东西

[
    {
        "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 排序,这之前不清楚。

【问题讨论】:

    标签: python sorting dictionary


    【解决方案1】:
    sorted(yourdata, reverse=True)
    

    【讨论】:

    • 我没有对此投反对票,但是您会意识到 dict 作为可迭代对象会返回键,因此您最终不会得到有用的列表
    • 不明白。输出就像问的那样。
    • @alexvassel: simple 示例中的输出恰好是相同的,但是如果任何字典中有一个额外的键,结果将是 确实非常不同。我没有否决您的回答,但该帐户不正确的。
    • 有时发生的情况是问题发生了变化,尽管它在某种意义上是一个有效的答案......我只是不会担心......即:你发布一个有效的解决方案,然后所有突然之间,问题发生了变化……而您的解决方案不起作用……有些人会毫不犹豫地投反对票,而其他人会评论说它不可行以及为什么(我更喜欢后者)...
    【解决方案2】:

    sorted() functionsort() method 使用key 关键字:

    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 Sorting HOWTO

    【讨论】:

      【解决方案3】:

      假设您要按列表中每个字典 dd['key']['subkey'] 的值排序,请使用以下命令:

      sorted(yourdata, key=lambda d: d.get('key', {}).get('subkey'), reverse=True)
      

      【讨论】:

      • 非常感谢您的回答,它适用于非常复杂的嵌套字典列表。鞠躬!
      猜你喜欢
      • 2018-03-17
      • 2019-05-08
      • 2021-07-27
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多