无法遍历 python 字典
Can't iterate over a python dictionary
我尝试将字典传递给将 "parse" 它的函数,但我无法对其进行迭代,它看起来很简单但无法理解发生了什么。
我的函数:
def _build_options(self, options):
print options
for option, value in options.iteritems():
if option not in self._optionslist:
del options[option]
return options
选项:
{'segment_container': None, 'use_slo': False, 'log_level': 'INFO',
'dir_marker': 'False', 'changed': None, 'leave_segments': False, 'fail_fast':
False, 'headers': 'X-Delete-After:50, X-Upload:None', 'meta': [],
'ttl': None, 'segment_size': None, 'skip_identical': False}
我的代码提出了这个问题:
AttributeError: Values instance has no attribute 'iteritems'
谢谢
编辑:
类型(选项):
<type 'instance'>
目录(选项):
['__cmp__', '__doc__', '__init__', '__module__', '__repr__', '__str__',
'_update', '_update_careful', '_update_loose', 'changed', 'dir_marker',
'ensure_value', 'fail_fast', 'headers', 'leave_segments', 'log_level', 'meta', 'read_file', 'read_module',
'segment_container', 'segment_size', 'skip_identical', 'ttl', 'use_slo']
我试过 options = dict(options) 但我得到错误:
TypeError: iteration over non-sequence
编辑2:
我有一个方法 upload() ,我在其中调用 _build_options():
def upload(self, paths, ttl, options):
# [...]
# print options, type(options)
# the dictionnary is well printed but its type is "instance"
opts = self._build_options(options)
在另一个文件中调用 upload() 是这样的:
self.swift_mng.upload(filename, None, options)
我从 optparse.parse_args()
获得选项
不确定属性错误。但是当你遍历它时,你不能改变字典的大小。如评论中所述,您可以检查选项类型,并执行以下操作:
def _build_options(self, options):
if type(options) == dict:
for option in self._optionslist:
if option in options:
del options[option]
return options
首先,你没有使用字典,它只是打印时的样子(它是 class 中的 __str__
方法使它看起来像那样)。
阅读documentation for optparse
, and also this。
options
是一个包含选项值的对象。据我所知,你不能迭代选项(没有 __iter__
,例如,在 class 中),你只能测试单个选项值。
编辑:但是,我确实发现这可能有用:http://code.activestate.com/lists/python-list/344094/
我尝试将字典传递给将 "parse" 它的函数,但我无法对其进行迭代,它看起来很简单但无法理解发生了什么。
我的函数:
def _build_options(self, options):
print options
for option, value in options.iteritems():
if option not in self._optionslist:
del options[option]
return options
选项:
{'segment_container': None, 'use_slo': False, 'log_level': 'INFO',
'dir_marker': 'False', 'changed': None, 'leave_segments': False, 'fail_fast':
False, 'headers': 'X-Delete-After:50, X-Upload:None', 'meta': [],
'ttl': None, 'segment_size': None, 'skip_identical': False}
我的代码提出了这个问题:
AttributeError: Values instance has no attribute 'iteritems'
谢谢
编辑: 类型(选项):
<type 'instance'>
目录(选项):
['__cmp__', '__doc__', '__init__', '__module__', '__repr__', '__str__',
'_update', '_update_careful', '_update_loose', 'changed', 'dir_marker',
'ensure_value', 'fail_fast', 'headers', 'leave_segments', 'log_level', 'meta', 'read_file', 'read_module',
'segment_container', 'segment_size', 'skip_identical', 'ttl', 'use_slo']
我试过 options = dict(options) 但我得到错误:
TypeError: iteration over non-sequence
编辑2: 我有一个方法 upload() ,我在其中调用 _build_options():
def upload(self, paths, ttl, options):
# [...]
# print options, type(options)
# the dictionnary is well printed but its type is "instance"
opts = self._build_options(options)
在另一个文件中调用 upload() 是这样的:
self.swift_mng.upload(filename, None, options)
我从 optparse.parse_args()
获得选项不确定属性错误。但是当你遍历它时,你不能改变字典的大小。如评论中所述,您可以检查选项类型,并执行以下操作:
def _build_options(self, options):
if type(options) == dict:
for option in self._optionslist:
if option in options:
del options[option]
return options
首先,你没有使用字典,它只是打印时的样子(它是 class 中的 __str__
方法使它看起来像那样)。
阅读documentation for optparse
, and also this。
options
是一个包含选项值的对象。据我所知,你不能迭代选项(没有 __iter__
,例如,在 class 中),你只能测试单个选项值。
编辑:但是,我确实发现这可能有用:http://code.activestate.com/lists/python-list/344094/