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