输入:字符串列表['who are they','are you there?','Yes! you be there']
输出:一个字典,它将任何字符串中的每个单词映射到由包含该单词的所有字符串的 id 组成的集合。
output = {'who':[1], 'are':[1,2], 'they':[1], 'you':[2,3], 'there':[2], 'Yes':[3], 'be':[3]}
我被卡住了,请帮忙,我无法制定执行此功能的方法或程序。
输入:字符串列表['who are they','are you there?','Yes! you be there']
输出:一个字典,它将任何字符串中的每个单词映射到由包含该单词的所有字符串的 id 组成的集合。
output = {'who':[1], 'are':[1,2], 'they':[1], 'you':[2,3], 'there':[2], 'Yes':[3], 'be':[3]}
我被卡住了,请帮忙,我无法制定执行此功能的方法或程序。
使用一个collections.defaultdict
对象来收集你的 id 并enumerate()
生成它们:
from collections import defaultdict
output = defaultdict(list)
for index, sentence in enumerate(inputlist):
for word in sentence.lower().split():
output[word.strip('!?. ')].append(index)
请注意,我将句子小写并去掉所有剩余的标点符号。
结果:
defaultdict(<class 'list'>, {'are': [0, 1], 'they': [0], 'be': [2], 'who': [0], 'yes': [2], 'there': [1, 2], 'you': [1, 2]})
这使用基于 0 的索引(就像 Python 中的所有内容一样)。如果您必须从 1 开始计数,请告诉enumerate()
从那里开始计数:
for index, sentence in enumerate(inputlist, 1):
我会这样解决这个问题:
def toDict(l):
ids, output,i = {}, {},1
for sentence in l:
ids[sentence] = i
i += 1
for sentence in l:
words = sentence.split(" ")
for word in words:
if word in output:
output[word].append(ids[sentence])
else:
output[word] = []
output[word].append(ids[sentence])
return output
返回:
{'be': [3], 'there': [3], 'who': [1], 'Yes!': [3], 'there?': [2], 'are': [1, 2], 'they': [1], 'you': [2, 3]}
这个有趣的解决方案怎么样:
import string
a = ['who are they','are you there?','Yes! you be there']
x ={}
for word in ' '.join(a).translate(None,string.punctuation).lower().split():
try:x[word]+=1
except:x[word]=1
print x