使用.iteritems()方法迭代字典时为空值

时间:2013-10-17 15:51:55

标签: python python-2.7 dictionary iterator

我对字典有一些奇怪的麻烦,我试图从字典中迭代对以传递给另一个函数。迭代器的循环虽然由于某种原因总是返回空值。

以下是代码:

  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, ['', '', '', '', '', '', '', ''])

我真的不知道最近会发生什么,执行此循环时没有其他任何事情发生。我做过的任何愚蠢的错误?

1 个答案:

答案 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 dictionariesunordered,当您尝试访问时, 它以随机的方式工作

在你的情况下:

有一个像(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())))