如何从字典中获取单词列表的值?

时间:2017-12-01 20:22:13

标签: python list dictionary

(对不起,如果我发错了帖子或在代码中犯了一些严重的错误,这是我的第一周)

我有一个字典,用这段代码获得:

import json
sentimientos=open("Sentimientos.txt")
valores={}
for linea in sentimientos:
    termino, valor=linea.split("\t")
    valores[termino]=(int(valor)):
print(valores.items())

看起来像这样:

  

dict_items([('abandon', - 2),('abandoned', - 2),('abandons', - 2),('abducted', - 2)......

但有很多话

然后我有一个单词列表(从推文获得的方法.split(“”)), 我需要检查第二个列表中的每个单词,如果这些单词存在于字典中,如果是,则将其值放入字典中。

我从列表中获得单词的代码是:

tw = open("salida_tweets.txt")
tweets = []
for linea in tw:
    clean_tweet = json.loads(linea)
    tweets.append(clean_tweet["text"])
    words = [tweet.split(" ") for tweet in tweets]
print(words)

我有类似的东西:

  

[['@ Brenamae_','我','WHALE','SLAP','你','FIN','和','TELL','你','ONE','LAST', 'TIME:' ...

但是,和以前一样,有很多单词

正如我所说,我需要制作一个列表,对于每条推文,打印字典中每个推文单词的值(如果推文有超过1个单词,则为单词的总和)。

我有严重的问题试图这样做。

¡谢谢大家!

PD:我试过的是:

import json
sentimientos=open("Sentimientos.txt")
valores={}
for linea in sentimientos:
    termino, valor=linea.split("\t")
    valores[termino]=(int(valor)):
tw = open("salida_tweets.txt")
tweets = []
for linea in tw:
    clean_tweet = json.loads(linea)
    tweets.append(clean_tweet["text"])
    words = [tweet.split(" ") for tweet in tweets]
    if words in valores:
    valorestweet.append(sum(valores.get(words) for valor in valores)

我得到的是

<ipython-input-68-30a0230d33a7> in <module>()
    19         tweets.append(clean_tweet["text"])
    20         words = [tweet.split(" ") for tweet in tweets] 
    ---> 21         if words in valores:
    22             valorestweet.append(sum(valores.get(words) for valor in valores))
    23 print(valorestweet)

TypeError:不可用类型:'list'

第22和23行用红色标出

1 个答案:

答案 0 :(得分:0)

我真的不确定我做对了,但是让我们说你有这样的意见:

tweet0 = "Hello, I am groot"
tweet1 = "My name is red"
tweets = [tweet0, tweet1]

这个词典:

dict = {'Hello': 1, 'I': -2, 'Yellow': -2, 'blue': -5, 'red': 4}

然后预期的输出将是这样的列表:

  

[推文1的值的总和,推文2的世界值的总和]

如果这真的是你想要的,那么这段代码可以解决问题:

dict = {'Hello': 1, 'I': -2, 'Yellow': -2, 'blue': -5, 'red': 4}

tweet0 = "Hello, I am groot"
tweet1 = "My name is red"
tweets = [tweet0, tweet1]

words = [tweet.split(" ") for tweet in tweets]

Results = list()

for i in range(len(tweets)):
    # words[i] are the words from the tweet i
    value = 0
    for word in words[i]:
        if word in dict:
            value += dict[word]
    Results.append(value)

print (Results)

此示例的输出为:

[-2, 4]

-2因为只有&#34;我&#34;在tweet0和4中出现,因为&#34; red&#34;在tweet1中出现。

正如您所注意到的,因为有一个&#34;,&#34;在&#34;你好&#34;之后,它没有考虑到这个词。这可以通过其他in语句修复,我们也可以在str中添加.lower()方法,以避免大写字母出现任何问题。

由于我不确定你想要什么,我只是做了这个概念验证。如果你能给我们提供明确的例子,我可以改进它。