【问题标题】:Custom Order a Nested Dictionary (or Set) in Python 3.7在 Python 3.7 中自定义一个嵌套字典(或集合)
【发布时间】:2020-06-06 19:33:56
【问题描述】:

我从 AWS 收到以下套装:

{
'AWS/EC2': 
{'CPUCreditBalance','NetworkOut','StatusCheckFailed_System','NetworkPacketsOut','NetworkPacketsIn','CPUSurplusCreditBalance','CPUUtilization','CPUSurplusCreditsCharged','StatusCheckFailed','DiskReadOps','DiskWriteOps','DiskWriteBytes','DiskReadBytes','StatusCheckFailed_Instance','CPUCreditUsage', 'NetworkIn'}, 
'System/Windows': {
'MemoryUtilization', 'Paging File % Usage', 'LogicalDisk % Free Space'
}
}

我需要能够自定义集合 'AWS/EC2' 中的 keys 以便它们始终按以下顺序排列: keyorder = ['StatusCheckFailed','CPUUtilization','DiskReadOps', 'DiskWriteOps','NetworkIn' ]

我终其一生都无法弄清楚如何指定顺序,以便我们在为 Cloudwatch 仪表板编写 JSON 时,这些值在许多仪表板中始终位于同一位置。

样本输出:

{
   "widgets":[
      {
         "type":"metric",
         "x":0,
         "y":9,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "NetworkPacketsOut",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "NetworkPacketsOut",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "NetworkPacketsOut",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":6,
         "y":9,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "NetworkPacketsIn",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "NetworkPacketsIn",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "NetworkPacketsIn",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":12,
         "y":9,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "DiskReadOps",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "DiskReadOps",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "DiskReadOps",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":18,
         "y":9,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "DiskReadBytes",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "DiskReadBytes",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "DiskReadBytes",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":0,
         "y":10,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "StatusCheckFailed_Instance",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "StatusCheckFailed_Instance",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "StatusCheckFailed_Instance",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":6,
         "y":10,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "DiskWriteBytes",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "DiskWriteBytes",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "DiskWriteBytes",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":12,
         "y":10,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "CPUUtilization",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "CPUUtilization",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "CPUUtilization",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":18,
         "y":10,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "DiskWriteOps",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "DiskWriteOps",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "DiskWriteOps",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":0,
         "y":11,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "StatusCheckFailed_System",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "StatusCheckFailed_System",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "StatusCheckFailed_System",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":6,
         "y":11,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "StatusCheckFailed",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "StatusCheckFailed",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "StatusCheckFailed",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":12,
         "y":11,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "NetworkOut",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "NetworkOut",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "NetworkOut",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":18,
         "y":11,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "AWS/EC2",
                  "NetworkIn",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "NetworkIn",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "AWS/EC2",
                  "NetworkIn",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":0,
         "y":12,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "System/Windows",
                  "Paging File % Usage",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "System/Windows",
                  "Paging File % Usage",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "System/Windows",
                  "Paging File % Usage",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":6,
         "y":12,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "System/Windows",
                  "MemoryUtilization",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "System/Windows",
                  "MemoryUtilization",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "System/Windows",
                  "MemoryUtilization",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      },
      {
         "type":"metric",
         "x":12,
         "y":12,
         "width":6,
         "height":6,
         "properties":{
            "view":"timeSeries",
            "stacked":false,
            "metrics":[
               [
                  "System/Windows",
                  "LogicalDisk % Free Space",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "System/Windows",
                  "LogicalDisk % Free Space",
                  "InstanceId",
                  "i-XXXXXX"
               ],
               [
                  "System/Windows",
                  "LogicalDisk % Free Space",
                  "InstanceId",
                  "i-XXXXXX"
               ]
            ],
            "region":"us-west-2"
         }
      }
   ]
}

【问题讨论】:

    标签: python-3.x dictionary set


    【解决方案1】:

    不要使用字典。根据定义,字典没有顺序。如果顺序对您真的很重要,请使用列表。

    {
       'a': 1,
       'b': 2,
       'c': 3
    }
    

    如果订单很重要,应该改为:

    [
       ['a', 1],
       ['b', 2],
       ['c', 3]
    ]
    

    或者,清洁工:

    [
       {key: 'a', value: 1},
       {key: 'b', value: 2},
       {key: 'c', value: 3}
    ]
    

    编辑: 似乎 Python 3.6+ 字典是根据插入顺序排序的。 此外,使用 OrderedDict 可能会解决您的问题(也许)。

    【讨论】:

    • Python 3.5 及以上,字典按插入/声明的顺序排列。
    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2019-09-17
    • 2020-11-28
    • 2011-10-24
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多