我对字典有一些奇怪的麻烦,我试图从字典中迭代对以传递给另一个函数。迭代器的循环虽然由于某种原因总是返回空值。
以下是代码:
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, ['', '', '', '', '', '', '', ''])
我真的不知道最近会发生什么,执行此循环时没有其他任何事情发生。我做过的任何愚蠢的错误?
答案 0 :(得分:1)
假设如下:
d = {1: [1,2,3,4,54,6,7,8]}
print d.items()
for k,v in d.iteritems():
print k, v
Output:
[(1, [1, 2, 3, 4, 54, 6, 7, 8])]
1 [1, 2, 3, 4, 54, 6, 7, 8]
您的self.ToBeMatchedTable
的密钥和值超过one pair
通常Python dictionaries
为unordered
,当您尝试访问时,
它以随机的方式工作
在你的情况下:
有一个像(0, ['', '', '', '', '', '', '', ''])
这样的键值对,所以第二次,你得到了它!
您的代码中似乎存在问题:
matchlist.append(k, linkworker.GetBestMatch(v, self.CentralDataTable.items()))
我已经模拟了类似于上面一行的内容
>>> l = []
>>>
>>> l.append(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: append() takes exactly one argument (2 given)
尝试将matchlist.append(...)
行评论或修改为:
matchlist.append((k, linkworker.GetBestMatch(v, self.CentralDataTable.items())))