2017-08-05 6 views
0

私はPythonを使い、辞書を理解しようとしています。私はこのエラーに関連する前に質問されていることを知っていますが、私の問題を理解する助けにはなりません。辞書を理解しようとしています

私は次のコード

mailSender = dict() 
count = 0 
name = input("Enter file:") 
handle = open(name) 
for line in handle: 
    line = line.rstrip() 
    if not line.startswith("From "): 
     continue 
    count = count + 1 
    senderNames = line.split() 
    # print(splitLines[1]) 
    print(senderNames[1]) 

    if senderNames not in mailSender: 
     mailSender[senderNames] = 1 
    else: 
     mailSender[senderNames] = mailSender[senderNames] + 1 

# print(mailSender) 

を持っている私は、NNDが、その後、ほとんどの電子メールの送信者見つけ、テキストファイルのための電子メールアドレスを選び出すしようとしています。私は私が間違っているつもり場所を確認するために経験を持っていない

if senderNames not in mailSender: TypeError: unhashable type: 'list' 

、と私は誰かがそれにいくつかの光を当てることを願って:

私は、次のエラーを得続けます。

+0

'senderNames'はリストです。リストは変更可能であるためハッシュ可能ではなく、dictキーはハッシュ可能である必要があります。 –

答えて

0

辞書が2部、keysvaluesを有しています。各key、そのように行われているvalue、を指す:

mailSender["[email protected]"] = 5 # This means, that [email protected] appears 5 times

あなたは、送信者の名前を探すためにしようとしているとき、あなたはどこkeysすべてのメールで名前を検索する必要があります辞書全体ではなく、keysvaluesのマッピングである。検索するメールアドレスの位置をsenderNamesに指定する必要があります。これはメールのリストの1つです。例えば

if senderNames[*index of name*] not in mailSender.keys(): 
    mailSender[senderNames] = 1 
else: 
    mailSender[senderNames] = mailSender[senderNames] + 1 

、あなたがこのような最初の電子メールアドレスを見つけるを参照することができる:あなたはにあなたのコードを変更することで、あなたの問題を解決することができ

if senderNames[0] not in mailSender.keys(): 
    mailSender[senderNames] = 1 
else: 
    mailSender[senderNames] = mailSender[senderNames] + 1 

senderNamesがである場合には、次にを検索しますmailSenderのキー。これが助けて欲しい!

+0

ありがとう!私はこれがもう少し進んでいくのに役立ったと思います! –

+0

あなたは大歓迎です!これが助けになったら、答えの左側にあるチェックマークを使ってこの回答を受け入れることを検討してください! @ o.fithcheallaigh – sccoding

+0

もし私ができれば、私はあなたの答えをアップヴォートするでしょう!しかし、まだ、私はできません。もう一度ありがとう! –

0

問題は、senderNamesを使用していることです。これは、Fromやその他のものを含むリストですが、おそらくあなたはsenderNames [1]という名前を探しています。このようなもの - 送信者の名前の配列の一部を単一の文字列に結合したいと思うかもしれませんが、データがどのように見えるか正確にはわかりません。

for line in handle: 
    line = line.rstrip() 
    if not line.startswith("From "): 
     continue 
    count = count + 1 
    senderNames = line.split() 
    print(senderNames[1]) 
    name = senderNames[1] 

    if name not in mailSender: 
     mailSender[name] = 1 
    else: 
     mailSender[name] = mailSender[name] + 1 
+0

ご協力いただきありがとうございました! –

関連する問題