从xlsx创建字典:TypeError:“Book”类型的参数不可迭代

时间:2013-08-12 15:12:17

标签: python dictionary typeerror xlsx xlrd

我对Python(以及xlrd模块)很陌生,所以我的代码可能不是那么紧凑。我只是用它来分析一些数据,所以对我来说更重要的是得到我正在做的而不是让我尽可能地使代码变得紧凑(尽管我希望改进,所以请随时给我关于编码本身的建议,只要你设法将其解释为“新手”:p)

话虽如此,这是我的问题:

上下文

我有一个xlsx文件,其中包含人们在翻译文本时所犯错误的数据。第一列包含相对于文本的错误代码(概念错误),第二列包含产生错误的转换程序的代码。我想创建一个字典,其中键是概念错误代码,值是导致概念错误的不同翻译器的列表。

xlsx中的一个短片段(为了让您了解两列中的代码):

1722_Z1_CF5     1722_HT_EV_Z1_F1

1722_Z1_CF1     1722_PE_AL_Z1_F1

1722_Z1_CF9     1722_PE_EVC_Z1_F1

1722_Z1_CF5     1722_PE_LH_Z1_F1

如您所见,概念错误'1722_Z1_CF5'由2个不同的人('1722_HT_EV_Z1_F1'和'1722_PE_LH_Z1_F1)制作。这个片段的字典看起来像:

1722_Z1_CF5: 1722_HT_EV_Z1_F1, 1722_PE_LH_Z1_F1
1722_Z1_CF1: 1722_PE_AL_Z1_F1 
1722_Z1_CF9: 1722_PE_EVC_Z1_F1

代码

下面的代码是我尝试创建字典的代码。

def TranslatorsPerError(sheet):

    TotalConceptualErrors(sheet)

    TranslatorsPerError = {}

    for row_index in range(sheet.nrows):
        if sheet.cell(row_index,0).value in ConceptualErrors and sheet.cell(row_index,0).value not in TranslatorsPerError:
            TranslatorsPerError[str(sheet.cell(row_index,0).value)]=[str(sheet.cell(row_index,1).value),]           

        if sheet.cell(row_index,0).value in ConceptualErrors and sheet.cell(row_index,0).value in TranslatorsPerError:
            TranslatorsPerError[str(sheet.cell(row_index,0).value)].append(str(sheet.cell(row_index,1).value))  

return TranslatorsPerError

'TotalConceptualErrors'是我创建的一个函数,它从第一列返回概念错误代码的列表('ConceptualErrors'),没有重复(并且它过滤掉了第一列中也存在的一些其他信息,这就是为什么我需要先使用这个。

问题

问题是这个函数一直给我一个错误: TypeError:'Book'类型的参数不可迭代

我知道可迭代的问题有时可以通过将某些东西转换成不同的类型来解决,但我不确定如何解决这个问题。我尝试将'str()'用于不同的元素,但这并没有解决问题。也许它与我的代码有关,也许与字典或xlrd的性质有关...(看看类型'书',我的猜测将在后者上)。

如何解决此问题的任何帮助或反馈将不胜感激。如果您需要额外的信息来了解正在发生的事情或我正在寻找什么,请询问。

1 个答案:

答案 0 :(得分:0)

在哪里设置了ConceptualErrors?