2014-08-29 48 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 2014-08-29 03:24:54

+1

如果你要處理這樣的表格數據,你應該檢查['pandas'](http://pandas.pydata.org);例如,你可以通過'df = pd.read_csv(「ff.dat」,sep =「\ t」)從一個文件計算碼/ df [「Yards/Attempt」] = df [「Yard」]/df [「Att」]'等,你可以很容易地連接多個文件。花費更多時間琢磨一下數字,找出誰來接受免責聲明,以及花更少的時間來編寫樣板文件。 – DSM 2014-08-29 03:37:19

回答

3

原因是您的輸出字典結構錯誤。如果Adrian Peterson的統計信息將包含在多個文件中,並且您希望將其彙總爲一個密鑰(即他的名字),那麼playerDict[player_name]應該是一個列表。

因此改變你的代碼做了以下內容:

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

我複製Adrian Peterson的在不同的文件中的數據,作出了上述改變你的代碼,這就是我所看到的:

{ 
    '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