我需要将元素列表作为关键字,以便我可以检查是否满足多个条件。 例(不知道这是可能的,如果语法是正确的):包含元素列表的YAML密钥
mapping:
c_id:
[pak, gb]: '4711'
[pak, ch]: '4712'
[pak]: '4713'
d_id:
.
.
.
现在我需要知道,如果有可能有一个方法作为例子。
我需要将元素列表作为关键字,以便我可以检查是否满足多个条件。 例(不知道这是可能的,如果语法是正确的):包含元素列表的YAML密钥
mapping:
c_id:
[pak, gb]: '4711'
[pak, ch]: '4712'
[pak]: '4713'
d_id:
.
.
.
现在我需要知道,如果有可能有一个方法作为例子。
除了安东的回答,这里是如何使用PyYaml:
mapping:
c_id:
!!python/tuple [pak, gb]: '4711'
!!python/tuple [pak, ch]: '4712'
!!python/tuple [pak]: '4713'
诀窍是告诉PyYaml你想把键加载到一个元组中(因为列表不能用作dict键)。没有办法这样做含蓄,但这并不意味着这是不可能的。
显式按键可以在这种情况下是更易读:
mapping:
c_id:
? !!python/tuple [pak, gb]
: '4711'
? !!python/tuple [pak, ch]
: '4712'
? !!python/tuple [pak]
: '4713'
这个例子是语义上等同于第一个。
您的YAML的语法是正确的。唯一的问题是,由于在Python的关键必须是不可变的,你需要指定到复杂的组合键作为一个元组访问:
import ruamel.yaml
yaml_str = """\
mapping:
c_id:
[pak, gb]: '4711'
[pak, ch]: '4712'
[pak]: '4713'
"""
data = ruamel.yaml.round_trip_load(yaml_str)
print(data['mapping']['c_id'][('pak', 'gb')])
给出:
4711
请注意,这是不可能的与PyYAML,因为它不支持序列作为关键,你必须使用ruamel.yaml
(免责声明:我是该包的作者)
保存我的问题,无需从PyYAML更改为任何其他模块,谢谢! – GiftZwergrapper