我有以下YAML文件名为input.yaml
:如何使用PyYAML读取python元组?
cities:
1: [0,0]
2: [4,0]
3: [0,4]
4: [4,4]
5: [2,2]
6: [6,2]
highways:
- [1,2]
- [1,3]
- [1,5]
- [2,4]
- [3,4]
- [5,4]
start: 1
end: 4
我加载它使用PyYAML和打印结果如下:
import yaml
f = open("input.yaml", "r")
data = yaml.load(f)
f.close()
print(data)
结果是数据结构如下:
{ 'cities': { 1: [0, 0]
, 2: [4, 0]
, 3: [0, 4]
, 4: [4, 4]
, 5: [2, 2]
, 6: [6, 2]
}
, 'highways': [ [1, 2]
, [1, 3]
, [1, 5]
, [2, 4]
, [3, 4]
, [5, 4]
]
, 'start': 1
, 'end': 4
}
正如你所看到的,每个城市和高速公路都被列为一个列表。但是,我希望他们能够被表示为一个元组。因此,我使用解析手动将它们转换为元组:
import yaml
f = open("input.yaml", "r")
data = yaml.load(f)
f.close()
data["cities"] = {k: tuple(v) for k, v in data["cities"].items()}
data["highways"] = [tuple(v) for v in data["highways"]]
print(data)
但是,这看起来像一个黑客。有什么方法可以指示PyYAML直接将它们读为元组而不是列表?
带标签的IMO最大的问题是它们强迫你通过load()方法使用不安全的'Constructor',并且不能再通过'safe_load()'使用'SafeConstructor'。 – Anthon
事实上,我不认为有更好的方法来完成我想要做的事情。 –