我将如何返回一个字典,其中键是给定文本中的单词,值是文本中先前单词的列表?
例如
text = "hi my name is"
get_previous_words_dict(text):
打印字典:
>>> my_dict['hi']
[]
>>> my_dict['my']
['hi']
>>> my_dict['name']
['hi', 'my']
正如@cjds指出的那样,这只有在句子中的单词是唯一的时才有意义。此外,第一个单词的值肯定应该是一个空列表,而不是包含空字符串的列表。以下内容将符合此规范:
def get_previous_words_dict(text):
words = []
dictionary = {}
for word in text.split():
dictionary[word] = words[:]
words.append(word)
return dictionary
要了解的最重要的事情是作业:
dictionary[word] = words[:]
这样做的效果是复制单词数组。如果是正常作业:
dictionary[word] = words
然后,这只会使每个字典条目引用相同的words
列表,因此在循环结束时,字典中的每个条目都将包含所有单词。
>>> t="hi my name is"
>>> li=t.split()
您可以使用字典理解:
>>> {w:[li[si] for si in range(i-1,-1,-1)] for i, w in enumerate(li)}
{'is': ['name', 'my', 'hi'], 'hi': [], 'my': ['hi'], 'name': ['my', 'hi']}
或者,向上计数:
>>> {w:[li[si] for si in range(0,i)] for i, w in enumerate(li)}
{'is': ['hi', 'my', 'name'], 'hi': [], 'my': ['hi'], 'name': ['hi', 'my']}
或者使用切片而不是嵌套列表理解
:>>> {w:li[0:i] for i, w in enumerate(li)}
{'is': ['hi', 'my', 'name'], 'hi': [], 'my': ['hi'], 'name': ['hi', 'my']}
如果我要从头开始实现:
使用哈希来存储单词,这用作字典。插入到哈希中时,插入为键 => [哈希中的先前键]。
-
将句子拆分为单词:
sentence_words = sentence.split(' ')
-
创建一个字典,其中键是单词,值是从该单词的开头到该单词位置的
sentence_words
切片。d = {w: sentence_words[:i] for i, w in enumerate(sentence_words)}
示例代码
sentence = "Hi my name is John"
sentence_words = sentence.split(' ')
d = {w: sentence_words[:i] for i, w in enumerate(sentence_words)}