2016-11-19 9 views
0

私の宿題では、この質問は、Pythonが長い文字列の特定の文字で始まる単語の数を対称にして辞書を作成する必要がある機能を作るように求めています。対称は、単語が1文字で始まり、同じ文字で終わることを意味します。私はこのためのアルゴリズムの助けを必要としません。私は間違いなく私はそれが正しいことを知っているが、私は理解できないこのキーのエラーを修正する必要があります。私はd[word[0]] += 1を書きました。これは、その特定の文字で始まる単語の頻度に1を加えることです。辞書のキーエラーです。 Pythonで辞書を印刷するには?

出力は(私は以下に文字列を使用して)次のようになります。 {'d': 1, 'i': 3, 't': 1}

t = '''The sun did not shine 
it was too wet to play 
so we sat in the house 
all that cold cold wet day 

I sat there with Sally 
we sat there we two 
and I said how I wish 
we had something to do''' 

def symmetry(text): 
    from collections import defaultdict 
    d = {} 
    wordList = text.split() 
    for word in wordList: 
     if word[0] == word[-1]: 
      d[word[0]] += 1 
    print(d) 
print(symmetry(t)) 

答えて

1

は、あなたはまだKeyError結果として作られるエントリの値を大きくしようとしています。まだキーの入力がない場合はget()を使用できます。 0のデフォルト値(または選択した他の値)が作成されます。この方法では、defaultdict)は必要ありませんが、場合によっては非常に便利です)。

def symmetry(text): 
    d = {} 
    wordList = text.split() 
    for word in wordList: 
     key = word[0] 
     if key == word[-1]: 
      d[key] = d.get(key, 0) + 1 
    print(d) 
print(symmetry(t)) 

サンプル出力

{'I': 3, 'd': 1, 't': 1} 
+1

ありがとうございました!これは正しい方法です!出来た!うまくいけば、私はあなたのコード(私が修正した部分)を使って将来的に重要なエラーを得ることはないでしょう。 – Jorgan

1

あなたはそれをインポートするが、あなたが実際に、collections.defaultdictを使用することはありません。 の代わりにddefaultdict(int)として初期化してください。中

def symmetry(text): 
    from collections import defaultdict 
    d = defaultdict(int) 
    wordList = text.split() 
    for word in wordList: 
     if word[0] == word[-1]: 
      d[word[0]] += 1 
    print(d) 

print(symmetry(t)) 

結果:

defaultdict(<class 'int'>, {'I': 3, 't': 1, 'd': 1})