我需要有一个元素列表作为键,以便我可以检查是否满足几个条件。 示例(不知道这是否可行以及语法是否正确):
Exception
现在我需要知道是否可以采用示例中的方法。
答案 0 :(得分:3)
除了Anthon的回答,以下是使用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'
此示例在语义上等同于第一个示例。
答案 1 :(得分:2)
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
(免责声明:我是该程序包的作者)