2014-08-29 2 views
0

환상의 축구 리그에서 내 통계 모델을 사용하여 노력하고 있으며 사전의 데이터 구조를 만드는 데 어려움을 겪고 있습니다. 내 데이터는 다음과 같습니다.환상의 축구 데이터가 포함 된 중첩 사전 Python

Player Team G Att Yard TD Target Rec Yard TD FFPts FFpts/G 
Adrian Peterson MIN 1 18 93 2 4 4 18 1 29.1 29.1 
Reggie Bush DET 1 21 90 0 8 4 101 1 25.1 25.1 
LeSean McCoy PHI 1 31 184 1 1 1 5 0 24.9 24.9 
Joique Bell DET 1 6 25 2 6 5 67 0 21.2 21.2 
Jamaal Charles KC 1 16 77 1 6 3 23 0 16.0 16.0 
Shane Vereen NE 1 14 101 0 10 7 58 0 15.9 15.9 

그리고 계절별로 매주 파일이 있습니다.

{'Adrian Peterson': 
    {'week1.txt': 
     {'Team':'MIN', 'G':'1','Att':'18'....} 
    } 
    {'week2.txt': 
     {'Team':'MIN', 'G':'1','Att':'20'....} 
    } 
} 

그러나 코드를 실행하면 매주 덮어 쓰며 그 이유를 알 수 없습니다.

코드 :

import os 

def makeDict(): 
    directory = os.listdir('.') 
    print directory 
    playerDict = {} 
    for item in directory: 
     if item != 'bayes.py' and item !='.DS_Store': 
      f = open(item) 
      headers = f.readline().split('\t') 
      for line in f: 
        stats = line.replace('\n','').split('\t') 
        statDict = {} 
        weekDict = {} 
        for i,stat in enumerate(stats): 
         if i ==0: 
          player = stat 
         else: 
          statDict[headers[i]] = stat 
         if i == len(stats)-1: 
          weekDict[item] = statDict 
          playerDict[player] = weekDict 

    return playerDict 

print makeDict() 

이 사전이 마지막 파일의 정보를 보유하고 있음을 끝납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

입니다. [glob] (https://docs.python.org/2/library/glob.html)에서 파일을 디렉토리에서 가져 오는 것이 좋습니다. 그 큰 기능을 몇 개의 작은 기능으로 나누고 모든 기능을 호출하는 기능도 있습니다. – IanAuld

+1

이렇게 테이블 형식의 데이터를 처리하려면 ['pandas'] (http://pandas.pydata.org)를 확인해야합니다. 예를 들어,'df = pd.read_csv ("ff.dat", sep = "\ t")에 의해 파일로부터 야드/시도를 계산할 수 있습니다; df [ "Yards/Attempt"] = df [ "Yard"]/df [ "Att"]'등, 여러 파일을 쉽게 연결할 수 있습니다. 철수하는 철사를 누가 고를 지 알아 내고 보일러 판을 쓰는 데 소비되는 시간을 줄이기 위해 시간을 더 많이 보냈다. – DSM

답변

3

이유는 출력 사전을 구성한 방식이 잘못 되었기 때문입니다. Adrian Peterson 님의 통계가 여러 파일에 포함되어 있고 하나의 키 (즉, 이름) 아래에 통계를 집계하려면 playerDict[player_name]이 목록이어야합니다.

그래서 다음을 수행하는 코드를 변경 : 나는 다른 파일에서 Adrian Peterson의 데이터를 중복

  1. from collections import defaultdict
  2. playerDict = defaultdict(list)
  3. playerDict[player].append(weekDict) 대신 playerDict[player] = weekDict

의 위를했다 코드가 바뀌고 이것이 내가 본 것입니다 :

{ 
    'AdrianPeterson': [ 
     { 
      'data': { 
       'FFPts': '29.1', 
       'Yard': '18', 
       'Target': '4', 
       'G': '1', 
       'Att': '188', 
       'Team': 'MIN', 
       'Rec': '4', 
       'TD': '1', 
       'FFpts/G\n': '29.1' 
      } 
     }, 
     { 
      'data2': { 
       'FFPts': '29.1', 
       'Yard': '18', 
       'Target': '4', 
       'G': '1', 
       'Att': '188', 
       'Team': 'MIN', 
       'Rec': '4', 
       'TD': '1', 
       'FFpts/G\n': '29.1' 
      } 
     } 
    ] 
} 

여기 datadata2은 내 파일의 이름입니다. 귀하의 경우, 그것은 week1.txtweek2.txt