嵌套字典Python与幻想足球数据

时间:2014-08-29 03:18:24

标签: python python-2.7 dictionary

我试图运行自己的统计模型试图在我的梦幻足球联赛中获得优势,而且我在制作词典数据结构时遇到了麻烦。我的数据看起来像这样。

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()

最终字典只保存最后一个文件中的信息。我做错了什么?

1 个答案:

答案 0 :(得分:3)

原因是你构造输出字典的方式是错误的。如果Adrian Peterson的统计信息将在多个文件中,并且您希望在一个密钥(即他的名字)下聚合它们,那么playerDict[player_name]应该是一个列表。

因此,请更改代码以执行以下操作:

  1. from collections import defaultdict
  2. playerDict = defaultdict(list)
  3. playerDict[player].append(weekDict)代替playerDict[player] = weekDict
  4. 我在不同文件中复制了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