我试图运行我自己的统计模型,试图在我的梦幻足球联赛中获得一个优势,而且我在创建字典的数据结构方面遇到了困难。我的数据是这样的。
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()最后,字典只保存最后一个文件中的信息。我做错了什么?
发布于 2014-08-29 03:36:57
原因是因为您构造输出字典的方式是错误的。如果Adrian Peterson的统计数据将在多个文件中,并且您希望将它们聚合到一个键(即他的名字)下,那么playerDict[player_name]应该是一个列表。
因此,请更改代码以执行以下操作:
from collections import defaultdictplayerDict = defaultdict(list)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'
}
}
]
}这里,data和data2是我文件的名字。在您的例子中,应该是week1.txt和week2.txt
https://stackoverflow.com/questions/25561190
复制相似问题