首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代Python3.4中的OrderedDict时出错

迭代Python3.4中的OrderedDict时出错
EN

Stack Overflow用户
提问于 2015-09-09 07:01:13
回答 1查看 321关注 0票数 0

我试图使用{ OrderedDict,Value}遍历键值,但遇到了键错误。在我正在使用的python3.4中,iteritems()已被弃用,现在我必须使用items()来做同样的事情

代码语言:javascript
复制
 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只包含一个普通的未排序的dict,参数本身也是来自下面调试的普通dict。示例如下

代码语言:javascript
复制
  {'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}}

下面是我通过调试ParamIndexes获得的一个示例

代码语言:javascript
复制
{
'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, 
...
...
....
....
....
....
....
....
....
....
}

是不是我漏掉了什么。我似乎不能让它使用items()来迭代字典。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2015-09-09 11:27:31

问题出在下面这一行:

代码语言:javascript
复制
self.optimizationArray[paramIndexes[k]] = (
self.mainParams[k]['start'], self.mainParams[k]['step'], self.mainParams[k]['stop'])

因为您刚刚创建了self.mainParams[k]['start']self.mainParams[k]['step']self.mainParams[k]['stop'],所以它们不会引发错误。剩下的唯一罪魁祸首是paramIndexes[k]和/或self.optimizationArray[paramIndexes[k]]

我会仔细检查 paramIndexes 是否具有 k ,以及 self.optimizationArray 是否具有映射到的paramIndexes[k]

这个问题与OrderedDict无关。它只是一个KeyError。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32468535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档