У меня есть следующая функция, которая печатает упорядоченный словарь:
def printSQN(analyzer):
sqn = round(analyzer.sqn, 2)
print(f'The System Quality Number (SQN) is: {sqn}')
Вывод выглядит следующим образом:
OrderedDict([('sharperatio', 0.19697863771541763)])
Я хотел бы «распаковать» этот упорядоченный словарь и распечатать только значение 0,19697863771541763.
Для этого я попытался сделать следующее:
def printSQN(analyzer):
sqn = round(analyzer.sqn, 2)
for key, value in sqn.items():
print(f'The System Quality Number (SQN) is: {value}')
Однако выполнение приведенного выше кода приводит к следующей ошибке:
Traceback (most recent call last):
File "backtest_02a.py", line 100, in <module>
printSQN(the_strategy.analyzers.sqn.get_analysis())
File "backtest_02a.py", line 50, in printSQN
for key, value in sqn.items():
AttributeError: 'float' object has no attribute 'items'
Документы библиотеки Backtrader
говорят:
"Базовый класс Analyzer создает атрибут члена self.rets
(типа collections.OrderedDict
) для возврата анализа. Это делается в методе create_analysis, который может быть переопределенным подклассами при создании пользовательских анализаторов. "
Похоже, что мой подход - тот, который предлагается в документах по адресу: https://docs.python.org/3/library/stdtypes.html#dict .items
Кто-нибудь видите, где мой for loop
имеет недостатки? Заранее спасибо!