setdefault和Integers的问题

时间:2014-08-22 06:02:27

标签: python tree

我正在测试以下功能:

def getDataMapOfFirstLine(line):
    datamap = {}
    for item in line:
        hierarchy = item.split('^')
        partialmap = datamap
        i=0
        for node in hierarchy:
            partialmap = partialmap.setdefault(node, i)
            i += 1

    return datamap

它应该从csv文件的第一行创建一个字典,如下所示:

nummer;such;ans;bverb^konum;bverb^namebspr;bverb^bank^iident;
1213;HANS;Hans Dominik;111000222;Hans' account; DE2145432523534232;
1444555;DIRK;Dirk Daniel;13300002;Dirk's account; DE2134634565462352;

正如您所看到的,每个以分号分隔的字符串中的这些抑扬符号类似于SQL中的连接。如果我执行它,我会收到此错误:

Traceback (most recent call last):
  File "./importtool.py", line 173, in <module>
    main()
  File "./importtool.py", line 38, in main
    analyseImportFile(importfile, parser, options)
  File "./importtool.py", line 119, in analyseImportFile
    datamap = getDataMapOfFirstLine(line)
  File "./importtool.py", line 149, in getDataMapOfFirstLine
    partialmap = partialmap.setdefault(node, i)
AttributeError: 'int' object has no attribute 'setdefault'

如果我通过{}替换setdefault-function中的i,则不会出现错误:

{'bverb': {'namebspr': {}, 'konum': {}, 'bank': {'iident': {}}}, 'such': {}, 'ans': {}}

这几乎就是我想要的,而不是{}我希望得到一个列号。

我只是不知道什么是错的。我在交互模式下试过这个:

>>> mydict = {'foo': "Hallo", 'bar': 5}
>>> mydict.setdefault("sth", 12)
12
>>> print mydict
{'sth': 12, 'foo': 'Hallo', 'bar': 5}

如您所见,这有效......

我感谢每一个帮助。提前谢谢!

1 个答案:

答案 0 :(得分:1)

你的问题就在这一行:

partialmap = partialmap.setdefault(node, i)

dict.setdefault 返回已设置的内容(或已存在的内容)。在这种情况下,它是一个整数,因此您将partialmap设置为int。您可能只是没有获取返回值(这是您在交互式终端BTW中所做的):

partialmap.setdefault(node, i)