2016-09-27 6 views
0

私はcoursera - Pythonからの課題を解決しようとしています。Python:courseraの割り当て - 辞書の章

mbox-short.txtを読んで、誰が最も多くのメールメッセージを送信したのかを把握するプログラムを作成します。プログラムは 'From'行を探し、その行の2番目の単語をメールを送信した人物とみなします。このプログラムは、送信者のメールアドレスをファイルに表示された回数のカウントにマップするPython辞書を作成します。ディクショナリが生成された後、プログラムはディクショナリを介して最大ループを使用して、最も多量のコミッタを見つける。

name = raw_input("Enter file:") 
if len(name) < 1 : name = "mbox-short.txt" 
handle = open(name) 

lst = list() 
for line in handle: 
    line = line.strip() 
    if line.startswith("From"): 
     words = line.split() 
     email = words[1] 
     lst.append(email) 

dct = dict() 
for email in lst: 
    dct[email] = dct.get(email,0)+1 

bigcount = None 
email_address = None 
for key,value in dct.items(): 
    if bigcount is None or value > bigcount: 
     bigcount = value 
     email_address = key 

print email_address, bigcount 

私のコードが実行されますが、所望の出力は次のようになります。[email protected] 5、しかし、私は何とか取得出力を「倍増」:10

[email protected]誰もがこの問題を解決しましたか?あなたは私が逃したものをヒントにしてください。大いに感謝する!

+0

dictの他のメールの出力を印刷して、そのメールに固有のものではないことを確認できますか? –

+0

すべてがうまく見えますが、ifを入力する行を印刷して問題を表示し、サンプルファイルを表示することができます。 – polku

+0

'for email in lst:' duplicated、多分あなたは2つ以上の行に同じテキストを持っています。 dictで処理する前に、入力テキストで一意の値を取得します。 – dsgdfg

答えて

0

チェックライン3726と3763。からの後にコロンがあります。私はあなたが手動で検索中にそれを見逃していると思います。

ライン3726から[email protected]木1月3日16時23分48秒2008

ライン3763から:

[email protected]

は、そうでない場合、コードは正しいです。正しい出力を示しています。

+0

こんにちは!すべての人に助けてくれてありがとう! – Ina

0

ヒントのおかげですべて。私は手動でチェックし、答えは10であることが正しいです。つまり、自分のコードは大丈夫です。 "5"の望ましい出力は、(私がそれらに従うように)コースセラコースからの割り当てによって示されました。 ありがとうございました!

関連する問題