2016-10-05 1 views
0

こんにちは私は様々な品種の異なる動物のCSVファイルを読み取るプログラムを作成しようとしています。異なった名前のいろいろな動物は同じ品種です。 (ボブとサムという名前の2匹の猫を想像してみてください)Pythonで値を更新

繁殖は1列にあり、名前は別の列にあります。

私はすべての動物を越えて、各品種の動物の数を数えたいと思っています。

私がこれまで持っているコードは、このようなものです:

dragon = open('dragons.csv') 

breed = {} 

for line in dragon: 
    row = line.strip().split(',') 
    if row[4] in breed.keys(): 

else: 
    breed[row[4]] = 1 #The Breed is in the fourth column 

私はこれをどのように行うことができますか?

ありがとうございました!

+0

またで「他:」行が、それは私に私が – Saadat

+1

あなた 'else'文を理解していないと同じでなければなりません「インデントされたブロックが期待される」のエラーになります同じレベルで '' if''なしで単独で立っているので、インデントが発生することが予想されます。 – Ian

+0

あなたelseとifに同じ字下げを入れます。したがって、インデントを追加してください。 – Jalo

答えて

2

コメントが指摘しているように、インデントはPythonで重要です。 elseifと同じインデントレベルではないため、エラーが発生します。

if row[4] in breed.keys(): 
    breed[row[4]] += 1 
else: 
    breed[row[4]] = 1 
+0

ありがとうございました!心から感謝する。 – Saadat

0

あなたelseブロック(elseforとペアリングすることができます不十分インデントですが、それはです:あなたのif/elseブロックは、このようなことができるようカウント用として、+=オペレータは、そのために有用である

珍しいことですが、あなたのコードのロジックがここでエラーと言います)。

たとえそれを修正しても、Pythonはブロックのインデントレベルを検出するために少なくとも1つのインデントされたコード行を必要とするため、Pythonでは空のブロックを持つことはできません(ブロック終了時)。ブロックのボディを指定しない(新しいブロックをすぐに開始する、またはボディを提供する前に外側のブロックを終了する)と、あなたが言及した "インデントされたブロックが予想される"エラーが発生します。

if row[4] in breed: # Don't call .keys(); much slower on Py2, a little slower on Py3 
    pass 
else: 
    breed[row[4]] = 1 #The Breed is in the fourth column 

それともそうelseブロックを制御するためにifテストを反転:だから、(ここで、「意味なし-OPのキーワードは何もしていないブロックに入れるべきものである)passを使用できますあなたは両方を必要としない:

if row[4] not in breed: 
    breed[row[4]] = 1 #The Breed is in the fourth column