Dicts与yaml文件成为OrderedDicts

时间:2018-05-01 11:30:44

标签: python python-3.x yaml pyyaml

我正在尝试将某些内容写入.yaml文件,但我对documentation感到困惑。它说如下:

<nav>
  <ul class="beg-container">
    <!-- beg-->
    <li>
      <!-- insusfful-->
      <ul class="left-container">
        <!-- left-->
        <li class="protectionn" style="width: 276px; border-right: 1px solid lightgray;">
          <a href="#"><img src="images/protection.png" width="20px;">payment protection program</a>
        </li>
        <li style="width: 119px;  border-right: 1px solid lightgray; "><a href="#">how we work</a></li>
        <li class="televesionn" style=" padding-left: 10px">
          <a href="#"><img src="images/televesion.png" width="20px"> watch our latest film</a>
        </li>
      </ul>
    </li>
    <li>
      <!-- insusfful-->
      <ul class="right-container">
        <!-- right -->
        <li><a href="#">post buy requirement</a></li>
        <li style="width: 150px; border-left: 1px solid lightgray;" style="width: 276"><a href="#">dowload app</a></li>
        <li style="width: 50px;  border-left: 1px solid lightgray;"><a href="#">help</a></li>
        <li style="width: 175px;  border-left: 1px solid lightgray;"><a href="#">+9196969696</a></li>
      </ul>
    </li>

  </ul>
</nav>

所以我试图在yaml文件中得到与此类似的结果:

Block mapping can be nested:

# YAML
hero:
  hp: 34
  sp: 8
  level: 4
orc:
  hp: 12
  sp: 0
  level: 2

# Python
{'hero': {'hp': 34, 'sp': 8, 'level': 4}, 'orc': {'hp': 12, 'sp': 0, 'level': 2}}

当我尝试使用文档示例中使用的内容时,会产生以下结果:

User1:
  name: 'name1'
  id: 001
  strikes: 1
User2:
  name: 'name2'
  id: 002
  strikes: 3

为此,我使用了以下代码:

User1: {id: '001', name: name1, strikes: 1}
User2: {id: '002', name: name2, strikes: 3}

1 个答案:

答案 0 :(得分:4)

默认情况下,PyYAML会以flow-style写出复合叶节点,其余以块样式写出。

如果您不想这样,即希望所有内容都是块式的,请使用safe_dump(data, default_flow_style=False)

import sys
import yaml


strikes = {'User1': {'name': 'name1', 'id': '001', 'strikes': 1}, 'User2': {'name': 'name2', 'id': '002', 'strikes': 3}}

yaml.safe_dump(strikes, sys.stdout, default_flow_style=False)

给出:

User1:
  id: '001'
  name: name1
  strikes: 1
User2:
  id: '002'
  name: name2
  strikes: 3

没有理由使用yaml.dump()代替yaml.safe_dump()(我绝对希望您没有使用yaml.load()代替yaml.safe_load()