2016-09-15 103 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(免責聲明:我是該包的作者)

相關問題