Python 多级默认字典
Python multi level default dict
我正在倒置 index.For 这个目的是我从文件的 file.Each 值中获取值,格式为:
document_Id'\t'term_Id'\t'pos_1'\t'pos_2...'\t'pos_n
这是一个正向索引representation.I想把它转换成倒排索引应该是这样的
term_Id'\t'"doc_Id:pos1,pos2...posn""doc_Id:pos1,pos2...posn"
为此,我使用列表的默认字典 type.This 是我的函数:
nestedDict = defaultdict(lambda:defaultdict(list))
def getInfo(line):
global nestedDict
tokens = re.split(r'\t+',line)
docInfo = int(tokens[0]) #Set document Id
termId = int(tokens[1]) #Set Term Id
currentPosition = int(tokens[2])
nestedDict[str(termId)][str(docInfo)] = str(currentPosition)
if len(tokens) > 3 :
for i in range(3,len(tokens)):
position = int(tokens[i])-currentPosition
currentPosition = currentPosition + position
nestedDict[str(termId)][str(docInfo)].append(currentPosition)
它给我一个 error:Str has no method .append。
我是 python.Any 的新手,将不胜感激。
您的嵌套 defaultdict
使 nestedDict[...][...]
成为 list
,但您随后为其分配了一个字符串。我认为您无论如何都不需要该分配:为什么不让循环处理所有位置?
我正在倒置 index.For 这个目的是我从文件的 file.Each 值中获取值,格式为:
document_Id'\t'term_Id'\t'pos_1'\t'pos_2...'\t'pos_n
这是一个正向索引representation.I想把它转换成倒排索引应该是这样的
term_Id'\t'"doc_Id:pos1,pos2...posn""doc_Id:pos1,pos2...posn"
为此,我使用列表的默认字典 type.This 是我的函数:
nestedDict = defaultdict(lambda:defaultdict(list))
def getInfo(line):
global nestedDict
tokens = re.split(r'\t+',line)
docInfo = int(tokens[0]) #Set document Id
termId = int(tokens[1]) #Set Term Id
currentPosition = int(tokens[2])
nestedDict[str(termId)][str(docInfo)] = str(currentPosition)
if len(tokens) > 3 :
for i in range(3,len(tokens)):
position = int(tokens[i])-currentPosition
currentPosition = currentPosition + position
nestedDict[str(termId)][str(docInfo)].append(currentPosition)
它给我一个 error:Str has no method .append。 我是 python.Any 的新手,将不胜感激。
您的嵌套 defaultdict
使 nestedDict[...][...]
成为 list
,但您随后为其分配了一个字符串。我认为您无论如何都不需要该分配:为什么不让循环处理所有位置?