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
4

1 に答える 1

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:]
于 2013-10-31T17:47:47.803 に答える