根据您所说的,我认为您正在尝试获取如下数据:
input = ["hello world", "foo bar", "red cat"]
data_wanted = {
"foo" : 1,
"hello" : 0,
"cat" : 2,
"world" : 0,
"red" : 2
"bar" : 1
}
因此,您应该做的是将单词作为键添加到字典中,并将它们的值作为strlist
它们所在的子字符串的索引。
def locateWords(strlist):
d = {}
for i, substr in enumerate(strlist): # gives you the index and the item itself
for word in substr.split()
d[word] = i
return d
如果单词出现在多个字符串中strlist
,则应将代码更改为以下内容:
def locateWords(strlist):
d = {}
for i, substr in enumerate(strlist):
for word in substr.split()
if word not in d:
d[word] = [i]
else:
d[word].append(i)
return d
这会将值更改为列表,其中包含strlist
包含该单词的子字符串的索引。
解释了您的一些代码问题
{}
不是集合,而是字典。
break
强制循环立即终止——你不想提前结束循环,因为你还有数据要处理。
d.update(index)
会给你一个TypeError: 'int' object is not iterable
。这个方法实际上接受一个可迭代对象并用它更新字典。通常你会为此使用一个元组列表[("foo",1), ("hello",0)]
:它只是将数据添加到字典中。
- 您通常不想使用
d.__setitem__
(无论如何您都输入错误)。你只需使用d[key] = value
.
- 您可以使用“for each”样式循环进行迭代,就像我上面的代码所示。循环范围意味着您正在循环索引。(不完全是一个问题,但如果你不小心正确使用索引,它可能会导致额外的错误)。
看起来您来自另一种编程语言,其中大括号表示集合,并且有一个结束控制块的关键字(如if, fi
)。刚开始时很容易混淆语法 - 但如果您在运行代码时遇到问题,请查看您获得的异常并在网络上搜索它们!
PS我不知道你为什么想要一套——如果有重复,你可能想知道它们的所有位置,而不仅仅是第一个或最后一个或介于两者之间的任何位置。只是我的 0.02 美元。