Python 将字典附加到字典列表会在关键字周围加上双引号
我想完成:Python 将字典附加到字典列表会在关键字周围加上双引号,python,json,dictionary,yaml,robotframework,Python,Json,Dictionary,Yaml,Robotframework,我想完成: 将词典附加到现有词典列表并更新新词典中的值 我的问题是: 当我在字典中阅读.yaml RobotFramework时,在关键字和值周围放置了双QOUTE,如下所示 在我的房间里 Vlan2: { u'IP': u'1.1.1.1', u'DNS': {u'SN': u's2', u'PN': u's1'}, u'SRoute': [{u'IF': u'eth0', u'Mask': u'0.0.0.0'}] } 但当我这么做的时
将词典附加到现有词典列表并更新新词典中的值 我的问题是: 当我在字典中阅读.yaml RobotFramework时,在关键字和值周围放置了双QOUTE,如下所示 在我的房间里
Vlan2: { u'IP': u'1.1.1.1',
u'DNS': {u'SN': u's2', u'PN': u's1'},
u'SRoute': [{u'IF': u'eth0', u'Mask': u'0.0.0.0'}]
}
但当我这么做的时候
Collections.Set To Dictionary ${Vlan2} IP=2.2.2.2
我登录到控制台
Log To Console ${Vlan2}
我明白了
[{ "u'IP'": "u'1.1.1.1'",
u'IP': '2.2.2.2',
"u'DNS'": {"u'SN'": "u's2'", "u'PN'": "u's1'"},
"u'SRoute'": [{"u'IF'": "u'eth0'", "u'Mask'": "u'0.0.0.0'"}]
}]
我认为这是因为Robot框架在读取.yaml中的值时添加了双qoutes,导致它显示为不同的关键字,但我无法找到如何修复此问题
最好避免同时使用双qoute,因为信息中的JSON是基于单个qoute的,如.yaml中所示
感谢您的帮助 这里有很多混乱。YAML的这一部分:
{ u'IP': u'1.1.1.1',
启动一个映射({
)并给出一个键值对。键和值都是标量。第一个标量以u
开始,在键指示符(:
)之前结束,因此标量的内容是u'IP'
。请注意,这可能不是您想要的,因为您说:
由于JSON的信息是基于单个qoute的,如.yaml中所示
您似乎认为您在YAML中使用的是单引号标量,而实际上,您使用的是无引号标量。在YAML中,如果标量不是以引号(“
或”
开头),它是一个普通的标量,其中的更多引号被解析为内容。您的标量以u
开头,使其成为不带引号的标量。您的YAML可能如下所示:
Vlan2: { IP: 1.1.1.1,
DNS: {SN: s2, PN: s1},
SRoute: [{IF: eth0, Mask: 0.0.0.0}]
}
另一件需要记住的重要事情是,当加载到Python中时,标量的表示样式将丢失——在YAML文件中,标量是单引号、双引号还是无引号都没有区别
现在让我们看一下输出:这里,字符串是以文本形式表示的。这意味着它们通过某种方式被引用。表示法“u'IP'
与您的输入完全匹配,双引号不会添加到字符串中;它们只是用来告诉您所包含的字符构成字符串
然后在输出中有这样的表示:
u'IP'
。这仍然是一个带引号的字符串,只是Python特有的表示前面有一个u
,表示这是一个unicode字符串–它的内容是IP
YAML中不存在u
-前缀表示,这就是为什么您的输入无法正常工作。。在YAML中,所有输入都是unicode,通常编码为UTF-8。输出中的u'IP'
是您用代码设置的IP
值。因为它与任何现有dict键都不匹配(如前所述,由于您的原始密钥的内容为u'IP'
,在输出中表示为“u'IP'
),因此它已作为附加密钥添加到dict中。这里有很多混淆。YAML的这一部分:
{ u'IP': u'1.1.1.1',
启动一个映射({
)并给出一个键值对。键和值都是标量。第一个标量以u
开始,在键指示符(:
)之前结束,因此标量的内容是u'IP'
。请注意,这可能不是您想要的,因为您说:
由于JSON的信息是基于单个qoute的,如.yaml中所示
您似乎认为您在YAML中使用的是单引号标量,而实际上,您使用的是无引号标量。在YAML中,如果标量不是以引号(“
或”
开头),它是一个普通的标量,其中的更多引号被解析为内容。您的标量以u
开头,使其成为不带引号的标量。您的YAML可能如下所示:
Vlan2: { IP: 1.1.1.1,
DNS: {SN: s2, PN: s1},
SRoute: [{IF: eth0, Mask: 0.0.0.0}]
}
另一件需要记住的重要事情是,当加载到Python中时,标量的表示样式将丢失——在YAML文件中,标量是单引号、双引号还是无引号都没有区别
现在让我们看一下输出:这里,字符串是以文本形式表示的。这意味着它们通过某种方式被引用。表示法“u'IP'
与您的输入完全匹配,双引号不会添加到字符串中;它们只是用来告诉您所包含的字符构成字符串
然后在输出中有这样的表示:
u'IP'
。这仍然是一个带引号的字符串,只是Python特有的表示前面有一个u
,表示这是一个unicode字符串–它的内容是IP
YAML中不存在u
-前缀表示,这就是为什么您的输入无法正常工作。。在YAML中,所有输入都是unicode,通常编码为UTF-8。输出中的u'IP'
是您用代码设置的IP
值。因为它与任何现有dict键都不匹配(如前所述,原始密钥的内容为u'IP'
,在输出中表示为“u'IP'
),它已被添加为dict的附加键。它真的在读取时添加双引号吗?您确定在记录时不只是使用双引号格式化输出吗?我不认为这些双引号是值的一部分…只是记录输出格式的一部分。您可以通过只记录一项dat来测试这一点a、 而不是数据结构。如果需要帮助诊断代码,您应该发布代码。请阅读并遵循建议。事实上,您有带有python样式unicode字符串的yaml数据(u'SN'
)似乎有点可疑。你确定yaml支持这种形式的unicode字符串吗?你是如何创建这个yaml文件的?我同意@BryanOakly的说法,我确信字典中包含了t