Я пытаюсь выполнить итерацию через OrderedDict с помощью {Key, Value}, но я запускаю Key Error. В iteritems() осуждался в Python 3.4, что я использую, и теперь я должен использовать элементы(), чтобы сделать то же самоеошибка Итерация через OrderedDict в Python 3.4
File "/home/hotdogs/mydictset.py", line 88, in __init__
self.mainParams[k]['start'], self.mainParams[k]['step'], self.mainParams[k] ['stop'])
KeyError: 'timed_exit_bars'
class MySet()
def __init__(self, filePath):
# Read diagnostics set file
self.content = readSetFile(filePath)
if not self.content: return
self.sections = self.content._sections
self.mainParams = {}
self.optimizationArray = {}
global paramIndexes
#for k, v in OrderedDict(self.content.items('main')).iteritems(): --was from python 2.7 and i have removed it.
for k, v in OrderedDict(self.content.items('main')).items():
# Add the params names avoiding the optimization line
if k.find(",") == -1:
# Adding name of the param and the value
if k not in self.mainParams:
self.mainParams[k] = {}
self.mainParams[k]['value'] = v
# optimization flags
if self.content.has_option('main', k + ',F'):
if self.content.getboolean('main', k + ',F') == 1:
self.mainParams[k]['optimize'] = True
self.mainParams[k]['start'] = self.content.getfloat('main', k + ',1')
self.mainParams[k]['step'] = self.content.getfloat('main', k + ',2')
self.mainParams[k]['stop'] = self.content.getfloat('main', k + ',3')
self.optimizationArray[paramIndexes[k]] = (
self.mainParams[k]['start'], self.mainParams[k]['step'], self.mainParams[k]['stop'])
else:
self.mainParams[k]['optimize'] = False
else:
self.mainParams[k]['optimize'] = False
i = 0
При попытке отладки ключа ошибки. я вижу, что mainParams содержит только обычный unsorted dict, и сами параметры также обычны сами по себе из отладки ниже. Пример ниже
{'section_1': {'value': '################# General Settings #################', 'optimize': False},
'run_every_tick': {'value': '0', 'optimize': False},
'historic_data_id': {'value': '1', 'optimize': False},
'section_2': {'value': '############## Common Strategy Settings ##############','optimize': False},
'use_instance_balance': {'value': '0', 'optimize': False},
'comments': {'value': 'Click Modify expert to view comments inside the source code.', 'optimize': False},
'operational_mode': {'value': '1', 'optimize': False},
'instance_management': {'value': '0', 'optimize': False},
'analysis_window_size': {'value': '0', 'optimize': False},
'enable_screenshots': {'value': '0', 'optimize': False},
'timed_exit_bars': {'step': 5.0, 'start': 5.0, 'value': '60', 'stop': 100.0, 'optimize': True},
'max_open_orders': {'value': '1', 'optimize': False},
'strategy_timeframe': {'value': '60', 'optimize': False},
'ui_font_size': {'value': '12', 'optimize': False},
'disable_compounding': {'value': '1', 'optimize': False}}
Ниже приведен пример того, что я получаю через Debug для ParamIndexes
{
'INTERNAL_STRATEGY_ID': 52,
'RUN_EVERY_TICK': 43,
'MAX_OPEN_ORDERS': 45,
'OPERATIONAL_MODE': 50,
'ANALYSIS_WINDOW_SIZE': 55,
'TIMEFRAME': 53,
'DISABLE_COMPOUNDING': 47,
'INSTANCE_MANAGEMENT': 44,
'MAX_SPREAD': 59,
'TIMED_EXIT_BARS': 48,
'STRATEGY_INSTANCE_ID': 51,
...
...
....
....
....
....
....
....
....
....
}
Есть ли что-то я отсутствует. Кажется, я не могу заставить его работать с элементами() для итерации через словарь. Любая помощь приветствуется.
Каково значение 'paramIndexes'? может быть, что это ошибка с ключом – lemonhead
'для k, v в OrderedDict (self.content.items ('main')). items()' - вызов OrderedDict на регулярном dict не собирается возвращаться в прошлое и получить информацию о заказе, которую вы никогда не отслеживали, а вызов OrderedDict на OrderedDict является бессмысленным, если вам не нужна копия. – user2357112