Python3 - YAML 没有正确地在列表中附加值
Python3 - YAML not correctly appending values in list
.yml 文件的片段:
- hosts: arbiters
roles:
- role: roles/arbiters
vars:
machines:
arb-1:
- repset: r-11
mongoversion: 4.2
port: 27017
- repset: r-17
mongoversion: 4.2
port: 27018
我想使用 Python:
附加带有值的子键
- repset: my_own_value
mongoversion: 40000
port: 1
以下代码部分有效
data[0]['roles'][0]['vars']['machines']['arb-2'] = dict(mongoversion='40000', port='1', repset='my_own_value')
给予
'arb-2': {'mongoversion': 40000,
'port': '1',
'repset': 'my_own_value'}
这是不正确的,因为我想追加而不是替换。
当我使用 +=
运算符而不是 =
时,它给出:
'arb-2': [{'mongoversion': 4.2,
'port': 27017,
'repset': 'r-10'},
{'mongoversion': 4.2,
'port': 27018,
'repset': 'r-16'},
'mongoversion',
'port',
'repset']
现在,值丢失了。我已经按照,尝试了几个设置,但我似乎没有成功。
问题是,您的元素 ['arb-1']
不是 dict
类型,而是 list
类型。
所以实际上你应该做以下事情:
data[0]['roles'][0]['vars']['machines']['arb-2'].append({'mongoversion'="v40000",'port'=1,'repset'="my_own_value"})
或者简而言之
data["some"]["path"].append({'your':"object",'values':"here"})
--编辑--
这是一个完整的测试程序。可以使用 pip install pyyaml
.
安装依赖项
import yaml
yaml_doc = """
a: 1
b:
c:
- a: b
e: f
- c: d
d: 4
"""
doc = yaml.load(yaml_doc, Loader=yaml.FullLoader)
print(type(doc["b"]["c"]))
print doc
doc["b"]["c"].append({"x":2,"w":"i","u":'t'})
print doc
.yml 文件的片段:
- hosts: arbiters
roles:
- role: roles/arbiters
vars:
machines:
arb-1:
- repset: r-11
mongoversion: 4.2
port: 27017
- repset: r-17
mongoversion: 4.2
port: 27018
我想使用 Python:
附加带有值的子键 - repset: my_own_value
mongoversion: 40000
port: 1
以下代码部分有效
data[0]['roles'][0]['vars']['machines']['arb-2'] = dict(mongoversion='40000', port='1', repset='my_own_value')
给予
'arb-2': {'mongoversion': 40000,
'port': '1',
'repset': 'my_own_value'}
这是不正确的,因为我想追加而不是替换。
当我使用 +=
运算符而不是 =
时,它给出:
'arb-2': [{'mongoversion': 4.2,
'port': 27017,
'repset': 'r-10'},
{'mongoversion': 4.2,
'port': 27018,
'repset': 'r-16'},
'mongoversion',
'port',
'repset']
现在,值丢失了。我已经按照
问题是,您的元素 ['arb-1']
不是 dict
类型,而是 list
类型。
所以实际上你应该做以下事情:
data[0]['roles'][0]['vars']['machines']['arb-2'].append({'mongoversion'="v40000",'port'=1,'repset'="my_own_value"})
或者简而言之
data["some"]["path"].append({'your':"object",'values':"here"})
--编辑--
这是一个完整的测试程序。可以使用 pip install pyyaml
.
import yaml
yaml_doc = """
a: 1
b:
c:
- a: b
e: f
- c: d
d: 4
"""
doc = yaml.load(yaml_doc, Loader=yaml.FullLoader)
print(type(doc["b"]["c"]))
print doc
doc["b"]["c"].append({"x":2,"w":"i","u":'t'})
print doc