2015-07-10 7 views
0

Предположим, у меня есть файл CSV ниже с данными некоторых игроков НФЛ. Моя цель - прочитать файл и создать словарь с ключами в качестве позиций и значения в виде списков профилей игроков в кортеже.Прочитать файл в словаре

(имя, возраст, рост, вес - За исключением года они были разработаны)

Я запутался о том, как правильно создать словарь при чтении файла. То, что я до сих пор находится внизу, но это беспорядок.

POSITION,NAME,DRAFTED,AGE,HEIGHT,WEIGHT 

QB,Aaron,2005,31,6,225 

WR,Jordy,2008,30,6,217 

WR,Randall,2011,24,5,192 

Ожидаемый словарь:

dict = { 
     QB: [('Aaron', 31, 6, 225)] 
     WR: [('Jordy', 30, 6, 217), ('Randall', 24, 5, 192)] 
     } 
     # Year drafted not included. 

Mine:

def readTheFile(filename): 

    read_it = open(filename, 'r') 

    player_dict = {} 

    #ignore header row 
    readFile = read_it.readlines()[1:] 

    for row in readFile: 

     k,v = line.split() 

     d[int(k)] = v 

    return player_dict 

ответ

0

Вот решение с использованием csv «s DictReader и defaultdict, что это то, что я хотел бы использовать более простой читатель:

#!/usr/bin/env python 
import csv 
from collections import defaultdict 

with open("players.csv") as f: 
    reader = csv.DictReader(f) 
    players = list(reader) 

# create position -> player mapping 
player_by_position = defaultdict(list) 
for player in players: 
    player_by_position[player["POSITION"]].append(tuple(player.values())) 

print player_by_position 

Она включает в себя положение игрока в значениях, но я надеюсь, что это достаточно близко :-) Вы можете также оставить игрока, как это есть словарь, описывающий его простой заменой:

player_by_position[player["POSITION"]].append(tuple(player.values())) 

С:

player_by_position[player["POSITION"]].append(player) 

Кроме того, ваш точный выход может быть достигнуто с помощью итерации простого читателя:

#!/usr/bin/env python 
import csv 
from collections import defaultdict 

player_by_position = defaultdict(list) 

with open("players.csv") as f: 
    reader = csv.reader(f) 
    for row in reader: 
     player_by_position[row[0]].append(tuple(row[1:]) 

print player_by_position 

Редактировать - Без импорта:

#!/usr/bin/env python 

player_by_position = {} 

with open("players.csv") as f: 
    # skip headers 
    f.readline() 
    for line in f: 
     values = line.strip().split(",") 
     if not values[0] in player_by_position: 
      # new position - create new list of players for it 
      player_by_position[values[0]] = [] 

     player_by_position[values[0]].append(tuple(values[1:])) 

print player_by_position 
+0

Может цель быть достигнута без импорта ничего? –

+0

@ VincentLuc см. Редактирование в конце. –

+0

Спасибо, я посмотрю. –

Смежные вопросы