首页 > 解决方案 > 使用python格式化字典

问题描述

我是 python 新手,有人可以告诉我如何将给定的代码更改为下面给出的格式化代码。数据存储在字典中,我想将格式化的数据也存储在字典中。我正在使用python 2.7版。可以这样做吗?可以在同一个字典中进行更改还是我们需要创建一个新字典?

我的代码:

{
"roles":
      {
         "AA":[
            {
               "date":"20150101",
               "total":6.0
            },
            {
               "date":"20150201",
               "total":14.5
            },
            {
               "date":"20150301",
               "total":14.5
            }
         ],
         "AB":[
            {
               "date":"20150301",
               "total":1.6
            },
            {
               "date":"20150401",
               "total":1.6
            },
            {
               "date":"20150501",
               "total":7.24
            }
         ]
      }
}

我想要的代码:

    {
    "key" : "roles",
    "values" : [
    {
    "key": "AA",
    "values": [
      {
        "date": "20150101",
        "total": 6
      },
      {
        "date": "20150201",
        "total": 14.5
      },
      {
        "date": "20150301",
        "total": 14.5
      }
    ]
    },
    {
    "key": "AB",
    "values": [
      {
        "date": "20150301",
        "total": 1.6
      },
      {
        "date": "20150401",
        "total": 1.6
      },
      {
        "date": "20150501",
        "total": 7.24
      }
    ]
    }
    ]
    }

标签: python-2.7

解决方案


不一定是最强大的,但只要输入格式与您提供的示例保持一致,就可以完成工作(pprint仅用于格式化输出。您无需安装它即可使代码正常工作)

from pprint import pprint

output = {}
for key, value in input_dict.items():
    output['key'] = key
    output['values'] = [{'key': inner_key, 'values': inner_value}
                        for inner_key, inner_value in value.items()]

pprint(output)

输出

{'key': 'roles',
 'values': [{'key': 'AA',
             'values': [{'date': '20150101', 'total': 6.0},
                        {'date': '20150201', 'total': 14.5},
                        {'date': '20150301', 'total': 14.5}]},
            {'key': 'AB',
             'values': [{'date': '20150301', 'total': 1.6},
                        {'date': '20150401', 'total': 1.6},
                        {'date': '20150501', 'total': 7.24}]}]}

推荐阅读