2017-12-01 10 views
1

(私は間違った記事を書いたり、コード内のいくつかの重大なミスを犯した場合申し訳ありませんが、それはこの中で私の最初の週である)単語リストの辞書から値を取得する方法は?

私はこのコードで得られた辞書、持っている:

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とつぶやきから得られた単語((」 "のリストを持っています))) 2番目のリストの各単語について、その単語が辞書に存在するかどうかを確認し、もしそうなら、その値を辞書に入れてください。

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_', 'I', 'WHALE', 'SLAP', 'YOUR', 'FIN', 'AND', 'TELL', 'YOU', '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例外である:非ハッシュタイプ: 'リスト'

線22と23が述べています赤で

+0

あなたが試したことを示し、それがうまくいかないことを正確に説明できますか? – glibdud

+0

私はいくつかのエディションを見た、間違いの申し訳ありません! 私はそれを投稿に追加します –

+0

完全なトレースバックが役に立ちます。その結果、どのラインがエラーを投げているのかが分かります。 – glibdud

答えて

0

私はそれが正しいとは確信していませんが、この入力があるとしましょう:

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

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

その後、予想される出力は、このようなリストのようになります。

[sum of the words value for tweet 1, sum of the world values for tweet 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のみ「I」はtweet0中に存在し、そして4ので、「赤」tweet1に存在するからです。

気付いたように、 "Hello"の後に "、"があるため、この単語を考慮しません。これは他のin文で修正することができます。大文字の問題を避けるために、.lower()メソッドをstrに追加することもできます。

私はあなたが何を望んでいるかわからないので、私はちょうどこの概念証明をしました。私たちに明確な例を与えるなら、それを改善することができます。

+0

それは絶対に私が探していたものであり、私はそれを正しく行うことができました。 これは初めてのことですが、 "len"のトリックはわかりませんでした。 よろしくお願い致します。 –

+0

うれしい私はそれを得た:) – Mathieu

関連する問題