0

我对 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: argument of type 'Book' is not iterable

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

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

4

1 回答 1

0

ConceptualErrors 在哪里设置?

于 2013-08-12T15:19:57.447 回答