【发布时间】:2020-07-02 08:31:49
【问题描述】:
我有一个任务,我要创建一个过程,该过程接收一个字符串列表并返回一个字典,该字典将所有输入字符串中的每个单词映射到由该单词出现的所有字符串的字符串编号组成的集合。在实际问题中,字符串是第一个索引为 1 的文本段落。
这是一个示例输入->输出:
L = ['a b c d e', 'a b b c c', 'd e f f']
makeInverseIndex(L) -> {'a': [1, 2], 'b': [1, 2], 'c': [1, 2], 'd': [1, 3], 'e': [1, 3], 'f': [3]}
我有两个可行的解决方案:
def makeInverseIndex(strlist):
InvInd = {}
for i, d in enumerate(strlist):
for w in d.split():
if w not in InvInd:
InvInd[w] = [i+1]
elif w in d and i+1 not in InvInd[w]:
InvInd[w].append(i+1)
return InvInd
def makeInverseIndex2(strlist): return {x:[d+1 for d in range(len(strlist)) if x in strlist[d]]
for w in strlist for x in w.split()}
我的问题是是否可以使用枚举以任何方式简化 dict 理解。教科书中的问题暗示我应该使用枚举,尽管我不知道如何实现它。
这是我最好的尝试,虽然我知道这是错误的,因为分配错误 IE。 w 在列表理解中分配给,但在行中不被识别:
for x in w.split()
def makeInverseIndex3(strlist): return {x:[i for i, w in enumerate(strlist) if x in strlist[i]]
for x in w.split()}
我感觉很接近,我确信解决方案可能很明显,但我就是想不通!
谢谢
【问题讨论】:
标签: python dictionary simplify dictionary-comprehension