2013-10-31 46 views
1

我遇到了解析輸入文件(示例如下所示)並將信息存儲在列表/字典組合中的代碼問題。存儲列表字典的問題

我有了類似這樣的行(他們是棒球統計)一個CSV文件:

Reyes,Jose,Mets,SS,681,191,36,12,12,57,.280 

我能夠分裂每個字段並妥善保存它的變量,但現在的問題進入當我必須將數據存儲在數據結構中時播放。

我必須存儲每個球員的統計數據,然後將球員存儲在他們所屬的每個球隊的字典/列表中。

我的思想過程是與此類似:

DICT OF TEAMS (TEAM IS KEY, VALUE IS A DICT OF PLAYERS) 
| 
V 
DICT OF PLAYERS (THEIR FULL NAME IS KEY, VALUE IS A LIST OF STATS) 
| 
V 
LIST OF STATS (EVERY SINGLE STAT IS IN HERE) 

不幸的是,我的統計名單將填補從整個文本文件(主要是投入列表的文本文件)的信息。我試過在while循環結束時清除表,但它將清單完全清除,即使我將它存儲在播放器字典中。

也許有人可以簡化我的想法或告訴我我做錯了什麼。

我的繼承人蔘考代碼:

import sys 
from collections import OrderedDict 

if len(sys.argv) == 1: 
    filename = raw_input("No filename supplied. Please enter one now: ") 
    print "Filename supplied. Running now." 
else: 
    print "Filename supplied. Running now." 
    filename = sys.argv[-1] 

#print "\n" 

f = open(filename, "r") 
l = f.readline() 

lastName = ""  #0 
firstName = ""  #1 
teamName = ""  #2 
position = ""  #3 
atBats = ""   #4 
baseHits = ""  #5 
doubles = ""  #6 
triples = ""  #7 
homeruns = ""  #8 
rbi = ""   #9 
batingAvg = ""  #10 

fullName = "" 

teams = {} 
players = {} 
stats = [] 

while l: 
    l = l.strip("\n") 
    curCol = l.split(",") 
    l = f.readline() 

    lastName = curCol[0] 
    firstName = curCol[1] 
    teamName = curCol[2] 
    position = curCol[3] 
    atBats = curCol[4] 
    baseHits = curCol[5] 
    doubles = curCol[6] 
    triples = curCol[7] 
    homeruns = curCol[8] 
    rbi = curCol[9] 
    batingAvg = curCol[10] 

    fullName = firstName + " " + lastName 

    stats.append(lastName) 
    stats.append(firstName) 
    stats.append(teamName) 
    stats.append(position) 
    stats.append(atBats) 
    stats.append(baseHits) 
    stats.append(doubles) 
    stats.append(triples) 
    stats.append(homeruns) 
    stats.append(rbi) 
    stats.append(batingAvg) 

    players[fullName] = stats 

print players 
+0

起飛看看csv模塊。 – jramirez

+0

_「他們的全名是關鍵,值是一個統計列表。」_當兩名球員有相同的名字時,你會做什麼? – Kevin

+0

@凱文我理解你的觀點,但我認爲一支球隊有兩名同名球員的可能性不大。如果他們這樣做,那麼我們不知道CSV究竟在談論哪一個。 – sdasdadas

回答

2

我相信你在每次迭代結束時清空您的統計列表。

while l: 
    # ... 
    stats = [] 

編輯:

啊,我明白你的問題。這是因爲,當你將列表存儲在字典中並清除它時,它也會在字典中清除它。

我相信你可以只作列表的副本在字典存儲:

import copy 
# ... 
players[fullName] = copy.deepcopy(stats) 
stats = [] 

編輯2:

另外,我相信你能做到這一點

with open(filename, 'r') as f: 
    for line in f: 
     firstName = line.split(",")[0] 
     lastName = line.split(",")[1] 
     players[firstName + " " + lastName] = line.split(",")[2:] 
+0

當我使用你列出的第二種方法(與deepcopy),我仍然得到同樣的錯誤,如果我打電話 球員['何塞雷耶斯'] – SlashTag

+0

錯誤意味着你得到所有球員的統計數據,當你查詢'何塞雷耶斯' ?您是否在while循環結束時清除了列表? – sdasdadas

+0

這樣做!完全忘了那部分。謝謝你的幫助。 – SlashTag