У меня есть следующая функция, которая распечатывает упорядоченный словарь:
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
неисправен? Заранее спасибо!
1 ответ
Сработало следующее решение:
list(the_strategy.analyzers._sharpe.get_analysis().values())[0]
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.