Python通过YAML进行迭代

时间:2019-03-13 20:30:30

标签: python yaml pyyaml

如何迭代:

.card:hover .cover-image

我想将A: A1: 1000 A2: A2A: A2A1: 100 A2A2: 250 A2A3: 250 A2B: A2B1: 100 A2B2: 300 A3: A3A: A3A1: A3A1A: 200 A3A1B: 100 # There could be more values A3A1A的值以及其他值添加到同一位置

我尝试了以下操作:

A3A1B

但这不起作用

1 个答案:

答案 0 :(得分:2)

这里有几个问题:

  • 您的YAML无效。键A3A2(或A2B)不对齐。我假设 您希望它与A2
  • 对齐
  • 根级别映射中的键是A而不是A1,因此您应该以 foobar['A']遍历数据结构。
  • 没有这样的事情,[*]使用.items()来获取键值对,或者.values()来获取键值对。 仅获取嵌套映射/字典的值
  • 您的for语句缩进不正确
  • 您正在使用PyYAML的load(),该文件据证明可能不安全,因此 不需要使用它。使用safe_load(),或升级到ruamel.yaml 您的YAML 1.2等等(免责声明:我是ruamel.yaml的作者)

例如您可以这样做:

import sys
import ruamel.yaml


yaml = ruamel.yaml.YAML(typ='safe')
with open('foobar.yaml') as fp:
  data = yaml.load(fp)

end_value = 0
for one_value in  data['A']['A3']['A3A']['A3A1'].values():
   end_value += one_value

print(end_value)

给出:

300