2
我必须缺少某些东西,但是我无法找到最大值并使用csv.DictReader()函数打印它们。Python csv:找出最大值的行
CSV文件是一样的东西(我已经削减领域以及行,因为行是太宽了这种格式):
traverse;damage;hull_front;turret_back;penetration;full_name;tier;hull_back;turret_sides;type;hull_sides;turret_front
38;30;18;16;32;Light Tank MS-1;1;16;16;Light Tank;16;18
40;30;13;13;32;Light Tank BT-2;2;13;13;Light Tank;13;15
55;36;15;15;34;Light Tank T-26;2;15;15;Light Tank;15;15
(希望我得到了所有的领域,我不得不使用切断与原文件。)
我阅读
tanks = csv.DictReader(open('tanks.csv', 'r'), delimiter = ';')
这个文件,但是当我试图发现了如哪一行在哪个列中具有最大的价值,我似乎无法通过字典来阅读。我的尝试是这样的:
def top_values(tanks):
tank = list(itertools.islice(tanks,1,2))
best_tanks = dict({'turret_front':tank, 'turret_sides':tank, 'turret_back':tank,
'hull_front':tank, 'hull_sides':tank, 'hull_back':tank,
'penetration':tank, 'damage':tank, 'traverse':tank})
fields = ['turret_front', 'turret_sides', 'turret_back',
'hull_front', 'hull_sides', 'hull_back',
'penetration', 'damage', 'traverse']
for tank in tanks:
for field in fields:
if tank[field] > best_tanks[field][field]:
best_tanks[field] = tank
print "Best tanks by values:\n"
for field in fields:
tank = best_tanks[field]
print field + ": " + tank['full_name'] + "(" + tank[field] + ")"
,但我得到
Traceback (most recent call last):
File "./wotalyzer.py", line 102, in <module>
main(sys.argv[1:])
File "./wotalyzer.py", line 98, in main
top_values(tanks)
File "./wotalyzer.py", line 44, in top_values
print field + ": " + tank['full_name'] + "(" + tank[field] + ")"
TypeError: list indices must be integers, not str
我怎样才能做到这一点?我想这样做,以便轻松添加新字段。
是的,我做到了这一点,它修复了一个其他的错误(这导致了一个空的字典给函数)后,它的工作原理。 – Makis 2011-02-25 13:53:57