Python 在dict中添加键会导致TypeError:';str';对象不支持项分配

Python 在dict中添加键会导致TypeError:';str';对象不支持项分配,python,yaml,Python,Yaml,我正在尝试用我自己的变量编辑YAML文件 这是我正在编辑的YAML模板: 映射: PrivateLink: 端点服务: 端点服务:主机名1 主要名称:“ NLB名称: NLB名称: 姓名:hostname1 TargetName: 主机名1-22: 姓名:hostname1-22 VpcId:vpc-123 Id:“i-123” 我的目标是循环列出我拥有的端口号,并使用它们创建新的目标组 例如,如果我的端口列表是[22,80,443],则输出YAML如下所示: 映射: PrivateLink:

我正在尝试用我自己的变量编辑YAML文件

这是我正在编辑的YAML模板:

映射:
PrivateLink:
端点服务:
端点服务:主机名1
主要名称:“
NLB名称:
NLB名称:
姓名:hostname1
TargetName:
主机名1-22:
姓名:hostname1-22
VpcId:vpc-123
Id:“i-123”
我的目标是循环列出我拥有的端口号,并使用它们创建新的目标组

例如,如果我的端口列表是
[22,80,443]
,则输出YAML如下所示:

映射:
PrivateLink:
端点服务:
端点服务:主机名1
主要名称:“
NLB名称:
NLB名称:
姓名:hostname1
TargetName:
#编辑在这里完成
主机名1-22:
姓名:hostname1-22
VpcId:vpc-123
Id:“i-123”
主机名1-80:
姓名:hostname1-80
VpcId:vpc-123
Id:“i-123”
主机名1-443:
姓名:hostname1-443
VpcId:vpc-123
Id:“i-123”
对于我的函数,如下所示:

def editEndpointServiceTemplate(端点服务模板路径):
yaml=yaml()
yaml.缩进(映射=3)
ports\u list=ast.literal\u eval(configParser.get(“端口”、“端口”))
#加载yaml文件
打开(端点\服务\模板\路径)作为fp:
数据=yaml.荷载(fp)
对于范围内的i(0,len(端口列表)):
tg_name=服务_name+“-”+str(端口列表[i])
数据['Mappings']['TargetName'][tg_name]=None
数据['Mappings']['TargetName'][tg_name]['name']=“测试”
#编写新的yaml文件
将开放(端点\服务\模板\路径“w”)作为fp:
yaml.dump(数据,fp)
我在这个错误上失败了:

data['Mappings']['TargetName'][tg_name]['Name'] = "test"
TypeError: 'str' object does not support item assignment
由于某种原因,我想我无法访问刚创建的密钥,但我不确定如何解决此问题。

通过更改以下内容来解决此问题:

data['Mappings']['TargetName'][tg_name]=None
为此:

data['Mappings']['TargetName'][tg_name]={}

现在已经修好了。我想我必须将它设置为dict对象。

数据['Mappings']['TargetName'][tg_name]
中的某个地方是一个字符串。请参见您的数据。
tg\u name
是一个字符串。我猜这就是问题所在,但为什么?我不想改变它。我创建了一个新键,现在我想访问它以创建更多的子键和值。然后
tg_name
应该是一个dict。您不能将键分配给字符串。谢谢@lllrnr101。当我尝试将其更改为
dict(tg\u name)
时,我得到了一个不同的错误,因此我在谷歌上搜索发现可以使用
eval(tg\u name)
。我尝试了,但仍然得到一些错误:
文件“”,第1行,在NameError中:未定义名称“dub”