Python PyYAML YAML加载所有对象(很好)

Python PyYAML YAML加载所有对象(很好),python,pyyaml,Python,Pyyaml,我有以下Python: class Instrument: def quandl_get(self): return quandl.get(self.quandl) def yaml_load_all(name): with open('yaml/' + str(name) + '.yaml', 'r') as ymlfile: return list(yaml.load_all(ymlfile)) instruments = yaml_loa

我有以下Python:

class Instrument:
    def quandl_get(self):
        return quandl.get(self.quandl)

def yaml_load_all(name):
    with open('yaml/' + str(name) + '.yaml', 'r') as ymlfile:
        return list(yaml.load_all(ymlfile))

instruments = yaml_load_all("instruments")
以及以下YAML:

!!python/object:v.Instrument
vstoxx:
    fractional_contracts: False
    multiplier: 100
    slippage: 0.0017
    per_contract_cost: 0.0211
    quandl: 'CHRIS/EUREX_FVS1'
---  
!!python/object:v.Instrument
corn:
    multiplier: 5000
    symbol: 'zc'
    months_traded: [3, 5, 7, 9, 12]
    quandl: 'CHRIS/CME_C2'
    forecasts: ['ewmac']
我想要的是仪器的目录,所以我可以做
instruments['vstoxx'].quandl_get()

作为奖励,我不想重复
!!python/object:v.Instrument
每次都在YAML文件中


目前我得到了一份仪器清单。我想我需要做两个步骤,将对象加载到一个列表中,然后将它们映射到一个dict。这真的是最干净的方法吗?

如果使用
加载文件中的所有
和多个文档(使用
--
),您总是会得到一个单独数据元素的列表

您可以将YAML文件更改为:

!!python/object:v.Instruments
vstoxx:
    fractional_contracts: False
    multiplier: 100
    slippage: 0.0017
    per_contract_cost: 0.0211
    quandl: 'CHRIS/EUREX_FVS1'
corn:
    multiplier: 5000
    symbol: 'zc'
    months_traded: [3, 5, 7, 9, 12]
    quandl: 'CHRIS/CME_C2'
    forecasts: ['ewmac']
(请不要在后端包含一个
s
),然后实现一个类
Instruments
,该类在加载YAML时创建单个
Instrument
实例并填充它们,并具有一个存储键值对的属性
self.\u lookup
(值是
Instruments
的实例)。然后在
Instruments
上创建:

 __getitem__(self, key):
     return self._lookup[key]

如果使用
加载文件中的所有
和多个文档(使用
--
),则始终会得到一个单独数据元素的列表

您可以将YAML文件更改为:

!!python/object:v.Instruments
vstoxx:
    fractional_contracts: False
    multiplier: 100
    slippage: 0.0017
    per_contract_cost: 0.0211
    quandl: 'CHRIS/EUREX_FVS1'
corn:
    multiplier: 5000
    symbol: 'zc'
    months_traded: [3, 5, 7, 9, 12]
    quandl: 'CHRIS/CME_C2'
    forecasts: ['ewmac']
(请不要在后端包含一个
s
),然后实现一个类
Instruments
,该类在加载YAML时创建单个
Instrument
实例并填充它们,并具有一个存储键值对的属性
self.\u lookup
(值是
Instruments
的实例)。然后在
Instruments
上创建:

 __getitem__(self, key):
     return self._lookup[key]