【发布时间】:2013-10-17 15:51:55
【问题描述】:
我在使用字典时遇到了一些奇怪的问题,我正在尝试从字典中迭代对以传递给另一个函数。尽管出于某种原因,迭代器的循环总是返回空值。
代码如下:
def LinktoCentral(self, linkmethod):
if linkmethod == 'sim':
linkworker = Linker.SimilarityLinker()
matchlist = []
for k,v in self.ToBeMatchedTable.iteritems():
matchlist.append(k, linkworker.GetBestMatch(v, self.CentralDataTable.items()))
现在如果我在 for 循环上方插入一个打印行:
matchlist = []
print self.ToBeMatchedTable.items()
for k,v in self.ToBeMatchedTable.iteritems():
matchlist.append(k, linkworker.GetBestMatch(v, self.CentralDataTable.items()))
我得到了应该在字典中打印的数据。字典的值是列表对象。我在 for 循环上方打印时从字典中得到的一个示例元组:
>>> (1, ['AARP/United Health Care', '8002277789', 'PO Box 740819', 'Atlanta', 'GA','30374-0819', 'Paper', '3676'])
但是,for 循环为 linkworker.GetBestMatch 方法提供了空列表。如果我在 for 循环下方放置一条打印行,我会得到以下结果:
代码:
matchlist = []
for k,v in self.ToBeMatchedTable.iteritems():
print self.ToBeMatchedTable.items()
matchlist.append(k, linkworker.GetBestMatch(v, self.CentralDataTable.items()))
## Place holder for line to send match list to display window
return matchlist
第一次迭代的结果:
>>> (0, ['', '', '', '', '', '', '', ''])
我真的不知道发生了什么,执行此循环时没有其他任何事情发生。我犯了什么愚蠢的错误?
【问题讨论】:
-
self.ToBeMatchedTable 是如何被填充的?此外, .iteritems() 现在已弃用,应简单地替换为 .items() 例如对于 d.items() 中的 k,v:通过
-
你能提供一个完整的例子吗?
-
@bcollins 不推荐使用——只是在 Python 3.x 中不需要——它在 2.x 中仍然完全有效,其中切换到
items()与 Python 3.x 版本完全不同 -
self.ToBeMatchedTable 是通过迭代 CSV 文件来填充的,我确信没有语法错误,但我必须通过我的代码来确认。
标签: python python-2.7 dictionary iterator