【问题标题】:Sorting deep dictionary [Python]对深度字典进行排序 [Python]
【发布时间】:2021-12-21 04:58:04
【问题描述】:

我有一个程序,每个项目为 5 个不同的环境获取 3 个键和值,并从中生成一个 JSON 文件。看起来像这样(简化)。

注意:项目的数量是可以改变的,在不同的环境中它们不能有相同的名称,它们的末尾有一个标签。

注意 2:项目名称不是“project1”“project2”,它们遵循特定的命名方案,使其独一无二。

{
    "env_preprod": {
        "project1": {
            "consumption last month": 127.283851, 
            "quotas": 200, 
            "consumption ": 117.657964
        }, 
        "project2": {
            "consumption last month": 0.000891, 
            "quotas": 200, 
            "consumption ": 0.00018
        }
    }
    "env_prod": {
        "project1": {
            "consumption last month": 127.283851, 
            "quotas": 200, 
            "consumption ": 117.657964
        }, 
        "project2": {
            "consumption last month": 0.000891, 
            "quotas": 200, 
            "consumption ": 0.00018
        }
    }
}

我希望按消耗量对 5 种不同行为中的项目进行排序,但无法完成。 我尝试使用 lambda 函数:

sort = dict(sorted(data.items(), key = lambda x: x[1]['consumption']))

我也试过了,但我没有对值进行排序:

res = {key : dict(sorted(val.items(), key = lambda ele: ele[1]))
       for key, val in data.items()}

我认为此时只有一个循环可以做到这一点,但现在无法正确解决。我只需要通过增加消费值来对环境中的项目进行排序。有什么建议吗?谢谢

【问题讨论】:

  • 你用的是哪个python? 2.7 还是 3?
  • 使用 2.7 作为开发环境,但真正使用的是 3.8
  • 目前无法写出真正的答案,但 python2 dict 无法保持顺序,请尝试使用 OrderedDict (from collection)

标签: python json dictionary nested


【解决方案1】:

如果你使用 Python2,试试这个:

{
    key: OrderedDict(
        sorted(value.items(), key=lambda x: x[1]['consumption '])
    ) 
    for key, value in data.items()
}

在 python3 上,您不需要 OrderedDict,因为所有 dicts 在 python 3 上都保持顺序

【讨论】:

  • 我得到了错误:sort = dict(sorted(data.items(), key = lambda x: x[1]['conso'])) KeyError: 'conso' (conso 是键的真实名称)在 Python 3 中,哪个字段用于自动排序?首先 ?还是基于别的东西?
  • 不是排序,是顺序(添加到dict的item的顺序保持)stackoverflow.com/questions/39980323/…
猜你喜欢
  • 1970-01-01
  • 2017-07-12
  • 2018-11-22
  • 2013-05-27
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多