2016-09-15 112 views
0

我需要将元素列表作为关键字,以便我可以检查是否满足多个条件。 例(不知道这是可能的,如果语法是正确的):包含元素列表的YAML密钥

mapping: 
    c_id: 
    [pak, gb]: '4711' 
    [pak, ch]: '4712' 
    [pak]: '4713' 
    d_id: 
    . 
    . 
    . 

现在我需要知道,如果有可能有一个方法作为例子。

回答

2

除了安东的回答,这里是如何使用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' 

这个例子是语义上等同于第一个。

+0

保存我的问题,无需从PyYAML更改为任何其他模块,谢谢! – GiftZwergrapper

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(免责声明:我是该包的作者)

相关问题