我是python的新手,并尝试编写一个带有字符串列表的过程,将它们分解为单独的单词,然后创建一个字典,将单词映射到它们出现的每个字符串。
例如: makeInverseIndex(['hello world','hello','hello cat','hellolot of cats'])== {'hello':{0,1,2},'cat':{2},'of' :{3},'世界':{0},'猫':{3},'hellolot':{3}}
这是我的代码:
def makeInverseIndex(strlist):
d = {}
for i in range(len(strlist)):
list = strlist[i].split()
print(list)
print(d)
for j in range(len(list)):
if list[j] in d:
d[list[j]].append(i)
else:
d[list[j]] = i
print(d)
return d
我认为问题在于我使用追加的方式。我已经看到了其他一些这样的问题,但我似乎无法将答案应用到我的代码中。
答案 0 :(得分:7)
问题不在于您使用追加的方式。有问题的一行是
d[list[j]] = i
指定一个整数。你想要
d[list[j]] = [i]
而是,它会分配一个您以后可以附加的列表。
请注意,您可以在此处使用setdefault
或collections.defaultdict
:
d = {}
for i, s in enumerate(strlist):
for c in s.split():
d.setdefault(c, []).append(i)
return d
另请注意,我删除了所有range(len(..))
个实例 - 这些实例在C中是必需的,但在Python中则不是。另外,请记住list
是变量的错误名称,因为它掩盖了built-in。