首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典中的键错误-不同的结构

字典中的键错误-不同的结构
EN

Stack Overflow用户
提问于 2020-05-13 00:18:30
回答 3查看 75关注 0票数 0

我正在查字典上那个经典的错误。我已经试过了所有我知道但没有成功的可能性。符号‘’似乎是问题的原因。

基本上,我想要做的是更改json中的密钥名。我在跟踪这个例子,但是,当我尝试使用自己的json时,它不起作用(参见json上的'[‘)。

我怎么才能解决这个问题?P.S:我得到了一个内部系统的json结果,我无法改变这一点。

这是我的代码和我得到的错误:

代码语言:javascript
复制
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)) 

下面是代码的输出和错误:

代码语言:javascript
复制
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'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-13 00:31:29

检查您的ini_dict对象。它是一个具有一个键值对的字典,其中包含一个包含一个字典的列表。想必这最后一本字典是你想要修改的。

输入:

代码语言:javascript
复制
ini_dict

输出:

代码语言:javascript
复制
{'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行。

代码语言:javascript
复制
ini_dict['result'][0]['New_Name'] = ini_dict['result'][0]['cmdb_ci.u_alias']
票数 0
EN

Stack Overflow用户

发布于 2020-05-13 00:33:52

尝尝这个

代码语言:javascript
复制
ini_dict['result'][0]['New_Name'] = ini_dict['result'][0]['cmdb_ci.u_alias']
del ini_dict['result'][0]['cmdb_ci.u_alias']

而不是这样:

代码语言:javascript
复制
ini_dict['New_Name'] = ini_dict['cmdb_ci.u_alias'] 
del ini_dict['cmdb_ci.u_alias']
票数 0
EN

Stack Overflow用户

发布于 2020-05-13 00:34:17

您的字典有一个嵌套结构。顶层的唯一键是result。该键的值是一个列表;该列表的第一个元素是另一个字典,其中包含您要查找的键。

你可以像这样先把它拔出来:

代码语言:javascript
复制
inner_dict = ini_dict['result'][0]

然后您可以更改密钥:

代码语言:javascript
复制
inner_dict['New Name'] = inner_dict.pop('cmdb_ci.u_alias')

pop方法移除并返回值,因此不需要单独调用del

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61764227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档