首页 > 解决方案 > 使用python重命名json键属性

问题描述

我正在尝试重命名 json 数据的键,但我似乎没有得到我想要的东西。你能指出这个问题吗?

import json

if __name__ == '__main__':

    json_data = [
        {
            "Aa": "A1 value",
            "Ab": "A2 Value",
            "Ac": "0",
            "Ad": "245",
            "Ae": "some value"
        },
        {
            "Aa": "A1 value2",
            "Ab": "A2 Value2",
            "Ac": "1",
            "Ad": "225",
            "Ae": "some value2"
        }
        ]

    vcounter = 1
    for item in json_data:      
        for oldKey,v in item.items():
            newKey = 'X'+str(vcounter)
            #print(newKey)
            item[newKey] = item.pop(oldKey)
            vcounter += 1
        print('Item:'+str(item))
        print('-----------------')
        vcounter = 1

输出

Item:{'Ab': 'A2 Value', 'X4': 'some value', 'X5': 'A1 value', 'X6': '0', 'X7': '245'}
-----------------
Item:{'Ab': 'A2 Value2', 'X4': 'some value2', 'X5': 'A1 value2', 'X6': '1', 'X7': '225'}
-----------------

预期的输出键被重命名为 X1 到列表中项目的长度。在这种情况下,它是 X1 到 X5

Item:{'X2': 'A2 Value', 'X5': 'some value', 'X1': 'A1 value', 'X3': '0', 'X4': '245'}
-----------------
Item:{'X2': 'A2 Value2', 'X5': 'some value2', 'X1': 'A1 value2', 'X3': '1', 'X4': '225'}
-----------------

标签: jsonpython-3.x

解决方案


假设您使用的是 Python 3.7+,其中 dict 键是有序的,您可以使用 dict 理解来迭代 dict 值的枚举,以使用通过'X'与枚举索引连接生成的新键构建一个新的 dict:

[{'X%s' % i: v for i, v in enumerate(d.values(), 1)} for d in json_data]

这将返回:

[{'X1': 'A1 value',
  'X2': 'A2 Value',
  'X3': '0',
  'X4': '245',
  'X5': 'some value'},
 {'X1': 'A1 value2',
  'X2': 'A2 Value2',
  'X3': '1',
  'X4': '225',
  'X5': 'some value2'}]

推荐阅读