(日本語は母国語ではないので。この文法がおかしかったらすみません…)
PythonでCSVファイルのデータをpython listに変換:
>>> import csv
>>> with open('foo.csv', 'rb') as f:
... r = csv.reader(f)
... l = [row for row in r]
...
>>> l
[['33.5', 'A', 'suzume', '3'], ['33.5', 'A', 'karasu', '2'], ['33.5', 'A', 'sekirei', '3'], ['33.5', 'A', 'suzume', '1'], ['33.5', 'A', 'kiji', '1'], ['33.5', 'B', 'suzume', '3'], ['33.5', 'B', 'karasu', '2'], ['33.5', 'B', 'hato', '1'], ['33.5', 'B', 'suzume', '1'], ['33.5', 'C', 'hato', '5'], ['40.0', 'A', 'suzume', '2'], ['40.0', 'A', 'karasu', '3'], ['40.0', 'B', 'sekirei', '4']]
これで「l」はlistのlistです。
CSVが「,」と違う文字でくぎる場合は (例えば「、」):
r = csv.reader(f, delimiter='、')
最後の1,2,3(l[x[3]])がいらないみたいので、それを消えればlistからsetにすると['33.5','A','suzume']を一つになります:
>>> l2 = list(set([tuple(z[0:3]) for z in l]))
>>> l2
[('33.5', 'A', 'suzume'), ('40.0', 'B', 'sekirei'), ('33.5', 'A', 'sekirei'), ('40.0', 'A', 'suzume'), ('33.5', 'C', 'hato'), ('40.0', 'A', 'karasu'), ('33.5', 'B', 'hato'), ('33.5', 'A', 'kiji'), ('33.5', 'B', 'karasu'), ('33.5', 'B', 'suzume'), ('33.5', 'A', 'karasu')]
x[1]、x[2]、(x[1],x[2])等で会計するのではfilterとlamdaが便利です:
>>> sum([float(z[0]) for z in filter(lambda x: x[1] == 'A', l2)])
214.0
お礼
ありがとうございます。 参考にさせてもらいます。 Thank you for the answer. I'll try with this reference.