Как разбить строку CSV так, что строка – это имя, а остальные элементы – кортеж?

У меня есть файл csv, в котором первый столбец является именем бейсболиста, а затем каждый последующий элемент в файле является статистикой. Я хотел бы иметь возможность импортировать файл, чтобы имя игрока было равно кортежу статистики.

Прямо сейчас, когда я импортирую файл, используя этот код:

Orioles = file("Orioles.csv", "rU") for row in Orioles: print row 

Я получаю что-то вроде этого:

 [Nick_Markakis, '.005', '.189', '.070', '.002', '.090'] [Adam_Jones, '.005', '.189', '.070', '.002', '.090'] 

Я бы хотел, чтобы статистика отображалась как float, а не строки, и была способна вытащить имя игрока и использовать его позже, например:

 Nick_Markakis = ['.005', '.189', '.070', '.002', '.090'] Adam_Jones = ['.005', '.189', '.070', '.002', '.090'] 

Наличие имени игрока в его собственной переменной не так полезно, как вы могли бы подумать: вы не можете перебирать коллекцию (потому что ее нет), ваш код является фиксированным и хрупким (вам нужно добавлять / удалять строки, когда имя игрока добавляется или удаляется из вашего файла и т. д.

Если, однако, у вас есть их в словаре – ну, теперь вы можете повторять, и вы все равно можете попросить игроков по имени.

 player_data = file("Orioles.csv", "rU") orioles = dict() for row in player_data: row = row.split(',') orioles[row[0]] = tuple(map(float, row[1:])) print orioles.keys() # ['Adam_Jones', 'Nick_Markakis'] print orioles['Adam_Jones'] # (0.005, 0.189, 0.07, 0.002, 0.09) 

Вместо row.split(',') выше, вы, вероятно, захотите использовать модуль csv в реальном коде.

 Orioles = file("Orioles.csv", "rU") stats = dict((row[0], map(float, row[1:])) for row in Orioles) # In Python 2.7+: stats = {row[0]: map(float, row[1:]) for row in Orioles} 

Теперь вы можете получить доступ к статистике следующим образом:

 print(sum(stats['Nick_Markakis'])) # 0.356