简化Python词典理解

2024-09-30 20:21:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是创建一个过程,该过程接收字符串列表并返回一个字典,该字典将所有输入字符串中的每个单词映射到由该单词出现的所有字符串的字符串编号组成的集合。在实际问题中,字符串是第一个索引为1的文本段落

下面是一个输入示例->;输出:

L=['abcde','abbcc','deeff']

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()}

我的问题是,是否可以使用枚举以任何方式简化听写理解。教科书中的问题暗示我应该使用enumerate,尽管我不知道如何实现它

这是我最好的尝试,虽然我知道这是错误的,因为分配错误 也就是说,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()}

我感觉很接近,我相信解决办法可能是显而易见的,但我就是搞不清楚

谢谢


Tags: 字符串ingt列表forreturnif字典
3条回答
from collections import defaultdict

L = ["a b c d e", "a b b c c", "d e f f"]
make_inverse_index = defaultdict(set)

for index, line in enumerate(L):
    for word in line.split():
        make_inverse_index[word].add(index + 1)

make_inverse_index = {key: list(value) for key, value in make_inverse_index.items()}

print(make_inverse_index)

输出:

{"a": [1, 2], "b": [1, 2], "c": [1, 2], "d": [1, 3], "e": [1, 3], "f": [3]}

将词典理解与枚举一起使用

def makeInverseIndex4(strlist):
  return {x:[d+1 for d, v in enumerate(strlist) if x in v] for w in strlist for x in w.split()}

或者我们可以使用start=1而不是d+1的枚举

def makeInverseIndex4(strlist):
      return {x:[d for d, v in enumerate(strlist, start=1) if x in v] for w in strlist for x in w.split()}

输出

{'a': [1, 2], 'b': [1, 2], 'c': [1, 2], 'd': [1, 3], 'e': [1, 3], 'f': [3]}

这对我很有用:

def makeInverseIndex3(strlist):
    dict_f = {}
    for i, w in enumerate(strlist):
        for x in set(w.split()):
            dict_f[x] = [i + 1] + dict_f.get(x, [])
    return(dict_f)

输出:

strlist = ['a b c d e', 'a b b c c', 'd e f f']
print(makeInverseIndex3(strlist))

{'e': [3, 1], 'a': [2, 1], 'c': [2, 1], 'd': [3, 1], 'b': [2, 1], 'f': [3]}

相关问题 更多 >