json - 使用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'}
-----------------
解决方案
假设您使用的是 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'}]
推荐阅读
- amazon-web-services - 报告是否使用 aws cli 启用了 Performance Insights
- javascript - 可以使用 Object.Assign 或扩展运算符重写此部分应用程序、动作创建器吗?
- string - 如何在 Camel Case 中拆分带有特殊大写单词的单词?
- ios - JSON 返回 null - 并使应用程序崩溃(首先检查数据)
- python - Pandas:将列中所有值的时间转换为秒
- c - 外部源文件中不会发生重定义错误
- javascript - 如何在图像上使用 clearRect?
- maven - 将 Log4J 依赖项添加到 Maven 项目时出错
- reactjs - 不能在异步函数中设置上下文?
- javascript - 如何在foreach中设置innerHTML?