为了账号安全,请及时绑定邮箱和手机立即绑定

使用字典和字符串的单词/对列表

使用字典和字符串的单词/对列表

翻翻过去那场雪 2021-03-30 17:09:36
我不确定如何在python 3.xx中完成此问题,请定义一个带一个参数的words函数:1.文本,字符串文本包含带有单词的句子,单词之间用空格分隔并以句点结尾。该函数返回一个word / sentenceList对的字典,其中word是文本中的每个不同单词,而句子列表是该单词出现的句子索引列表。注意:例如,如果text ='I say,您的代码对大小写不敏感。我的意思是。我的意思是我说的。我做。”函数返回{'i“:[0,1,2],'say':[0,1],'what':[0,1],'mean':[0,1],'要做:[2]}
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

由于某些原因,人们经常问如何在没有defaultdict的情况下执行此操作


>>> text= "I say what I mean. I mean what I say. i do."

>>> sentences = text.lower().split('.')

>>> dic = {}

>>> for i, sen in enumerate(sentences):

...     for word in sen.split():

...         if word not in dic:         # you just need these

...             dic[word] = set()       # two extra lines

...         dic[word].add(i)

... 

>>> dic

{'i': set([0, 1, 2]), 'do': set([2]), 'say': set([0, 1]), 'what': set([0, 1]), 'mean': set([0, 1])}

如果您确实想要列表,可以通过以下修改来做到这一点


>>> text= "I say what I mean. I mean what I say. i do."

>>> sentences = text.lower().split('.')

>>> dic = {}

>>> for i, sen in enumerate(sentences):

...     for word in sen.split():

...         if word not in dic:

...             dic[word] = [i]

...         elif dic[word][-1] != i:     # this prevents duplicate entries

...             dic[word].append(i)

... 

>>> dic

{'i': [0, 1, 2], 'do': [2], 'say': [0, 1], 'what': [0, 1], 'mean': [0, 1]}

如果您甚至不被允许使用枚举


>>> text= "I say what I mean. I mean what I say. i do."

>>> sentences = text.lower().split('.')

>>> dic = {}

>>> i = -1

>>> for sen in sentences:

...     i += 1

...     for word in sen.split():

...         if word not in dic:

...             dic[word] = [i]

...         elif dic[word][-1] != i:     # this prevents duplicate entries

...             dic[word].append(i)

... 

>>> dic

{'i': [0, 1, 2], 'do': [2], 'say': [0, 1], 'what': [0, 1], 'mean': [0, 1]}


查看完整回答
反对 回复 2021-04-05
?
暮色呼如

TA贡献1853条经验 获得超9个赞

您可以collections.defaultdict在这里使用:


>>> from collections import defaultdict

>>> text= "I say what I mean. I mean what I say. i do."

#  convert the text to lower-case and split at `'.'` to get the sentences.

>>> sentences = text.lower().split('.')  

>>> dic = defaultdict(set)       #sets contain only unique iteme

for i,sen in enumerate(sentences): #use enumerate to get the sentence as well as index

    for word in sen.split():       #split the sentence at white-spaces to get words

        dic[word].add(i)


>>> dic

defaultdict(<type 'set'>,

{'i': set([0, 1, 2]),

 'do': set([2]),

 'say': set([0, 1]),

 'what': set([0, 1]),

 'mean': set([0, 1])})

使用普通字典:


>>> dic = {}

for i,sen in enumerate(sentences):

    for word in sen.split():

        dic.setdefault(word,set()).add(i)

...         

>>> dic

{'i': set([0, 1, 2]),

 'do': set([2]),

 'say': set([0, 1]),

 'what': set([0, 1]),

 'mean': set([0, 1])}

没有enumerate:


>>> dic = {}

>>> index = 0

for sen in sentences:

    for word in sen.split():

        dic.setdefault(word,set()).add(index)

    index += 1

...     

>>> dic

{'i': set([0, 1, 2]), 'do': set([2]), 'say': set([0, 1]), 'what': set([0, 1]), 'mean': set([0, 1])}



查看完整回答
反对 回复 2021-04-05
  • 2 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号