我试图运行自己的统计模型试图在我的梦幻足球联赛中获得优势,而且我在制作词典数据结构时遇到了麻烦。我的数据看起来像这样。
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 :(得分:3)
原因是你构造输出字典的方式是错误的。如果Adrian Peterson
的统计信息将在多个文件中,并且您希望在一个密钥(即他的名字)下聚合它们,那么playerDict[player_name]
应该是一个列表。
因此,请更改代码以执行以下操作:
from collections import defaultdict
playerDict = 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