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