我正在测试以下功能:
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}
如您所见,这有效......
我感谢每一个帮助。提前谢谢!
答案 0 :(得分:1)
你的问题就在这一行:
partialmap = partialmap.setdefault(node, i)
dict.setdefault
返回已设置的内容(或已存在的内容)。在这种情况下,它是一个整数,因此您将partialmap
设置为int
。您可能只是没有获取返回值(这是您在交互式终端BTW中所做的):
partialmap.setdefault(node, i)