我需要將元素列表作爲關鍵字,以便我可以檢查是否滿足多個條件。 例(不知道這是可能的,如果語法是正確的):包含元素列表的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