Python3-YAML无法正确将值附加到列表中

问题描述 投票:0回答:1

。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']

现在,值丢失。我遵循了answer as described here,并尝试了几种设置,但似乎没有成功。

python-3.x yaml pyyaml
1个回答
1
投票
问题是,您的元素['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

© www.soinside.com 2019 - 2024. All rights reserved.