Итерации в упорядоченном словаре приводят к следующему: объект 'float' не имеет атрибута 'items' - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть следующая функция, которая печатает упорядоченный словарь:

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 Ответ

0 голосов
/ 15 апреля 2020

Сработало следующее решение:

list(the_strategy.analyzers._sharpe.get_analysis().values())[0]
...