我正在查字典上那个经典的错误。我已经试过了所有我知道但没有成功的可能性。符号‘’似乎是问题的原因。
基本上,我想要做的是更改json中的密钥名。我在跟踪这个例子,但是,当我尝试使用自己的json时,它不起作用(参见json上的'[‘)。
我怎么才能解决这个问题?P.S:我得到了一个内部系统的json结果,我无法改变这一点。
这是我的代码和我得到的错误:
import json
line = {'result': [{'end_date': '2020-05-15 05:00:00', 'number': 'CG0239308', 'cmdb_ci.u_alias': 'DNS', 'short_description': 'DNS test ', 'start_date': '2020-05-15 02:00:00'}]}
line2 = json.dumps(line)
result = json.loads(line2)
print ('line result:', json.dumps(result, indent=5))
ini_dict = result
###Changing dictionary key
# printing initial json
print ("initial 1st dictionary", ini_dict)
# changing keys of dictionary
ini_dict['New_Name'] = ini_dict['cmdb_ci.u_alias']
del ini_dict['cmdb_ci.u_alias']
# printing final result
print ("final dictionary", str(ini_dict)) 下面是代码的输出和错误:
line result: {
"result": [
{
"end_date": "2020-05-15 05:00:00",
"number": "CG0239308",
"cmdb_ci.u_alias": "DNS",
"short_description": "DNS test ",
"start_date": "2020-05-15 02:00:00"
}
]
}
Traceback (most recent call last):
File "C:\Users\renato\Desktop\dict.py", line 20, in <module>
ini_dict['New_Name'] = ini_dict['cmdb_ci.u_alias']
KeyError: 'cmdb_ci.u_alias'发布于 2020-05-13 00:31:29
检查您的ini_dict对象。它是一个具有一个键值对的字典,其中包含一个包含一个字典的列表。想必这最后一本字典是你想要修改的。
输入:
ini_dict输出:
{'result': [{'end_date': '2020-05-15 05:00:00',
'number': 'CG0239308',
'cmdb_ci.u_alias': 'DNS',
'short_description': 'DNS test ',
'start_date': '2020-05-15 02:00:00'}]}这可能是你想要的第20行。
ini_dict['result'][0]['New_Name'] = ini_dict['result'][0]['cmdb_ci.u_alias']发布于 2020-05-13 00:33:52
尝尝这个
ini_dict['result'][0]['New_Name'] = ini_dict['result'][0]['cmdb_ci.u_alias']
del ini_dict['result'][0]['cmdb_ci.u_alias']而不是这样:
ini_dict['New_Name'] = ini_dict['cmdb_ci.u_alias']
del ini_dict['cmdb_ci.u_alias']发布于 2020-05-13 00:34:17
您的字典有一个嵌套结构。顶层的唯一键是result。该键的值是一个列表;该列表的第一个元素是另一个字典,其中包含您要查找的键。
你可以像这样先把它拔出来:
inner_dict = ini_dict['result'][0]然后您可以更改密钥:
inner_dict['New Name'] = inner_dict.pop('cmdb_ci.u_alias')pop方法移除并返回值,因此不需要单独调用del。
https://stackoverflow.com/questions/61764227
复制相似问题