setdefault和整数的问题
我正在测试以下这个函数:
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函数中的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 个回答
2
你的问题出在这一行:
partialmap = partialmap.setdefault(node, i)
dict.setdefault
返回的是你设置的值(或者是已经存在的值)。在这个例子中,它返回的是一个整数,所以你把 partialmap
设置成了一个 int
。其实你可以选择不去获取这个返回值(顺便说一下,这也是你在交互式终端中做的事情):
partialmap.setdefault(node, i)