2016-10-05 15 views
-2

私が手にしているタスクは、大きなテキスト(数100K行)ファイルを解析し、いくつかの統計ベースを蓄積してプロットで可視化することです。各行には、いくつかの事前分析の結果が含まれています。Pythonで可変オブジェクトの順序付けられていないコレクション

累積するオブジェクトを定義するカスタムクラスを作成しました。このクラスには、2つの文字列フィールド、3つのセットと2つの整数カウンタが含まれています。したがって、名前と空のフィールドで新しいオブジェクトを初期化する__init__(self, name)と、オブジェクトに情報を追加するaddRow()というメソッドがあります。セットはこのオブジェクトに関連するデータを蓄積し、カウンタは2つの条件を追跡します。

私のオリジナルのアイデアは、ファイルの行を反復処理すると mainようになります

reader = csv.reader(f) 
acc = {} # or set() 
for row in reader: 
    parseRow(row,acc) 

parseRow()のようなメソッドを呼び出すことだった

:ここでの問題があるということ

parseRow(row, acc): 
    if row[id] is not in acc: # row[id] is the column where the object names/ids are 
    a = MyObj(row[id]) 
    else: 
    a = acc.get(row[id]) # or equivalent 
    a.addRow(...) 

累積コレクションaccは、setになることはできません。なぜなら、セットは明らかにPythonではインデックス可能ではないからです。 編集:明確化のため刃先交換式によって私はn番目の要素を取得ではなく、にできることを意味するものではありませんでしたが、特定の要素を取得します。

回避策の1つは、{obj_name : obj}マッピングを持つdictですが、醜い解決策のように感じます。それ以外の言語の優雅さを考えれば、もっと良い解決策があると思います。確かにまれな状況ではありません...

何か提案がありますか?

+1

どのように順序付けられていない、インデックスを作成できるものがありますか?順序付けられていないコレクションから最初のものを取得するのはどういう意味ですか? – jonrsharpe

+0

@jonrsharpe私の悪い、インデクサブルで私は何かを意味していますあなたはオペレーションを取得することができますラ 'd [" myitem "]'または 's.get(" myitem ")' – posdef

+0

dict "感じる理由は不明です""醜い "ソリューションのように。値(不変オブジェクト)で何か(可変オブジェクト)を索引付けしますか?それは辞書です。 Python dictオブジェクトには、非常に素晴らしいsetdefaultメソッドがあり、parseRow関数をonelinerに圧縮する可能性があります。しかし、問題は明確ではありません - 行IDは何ですか? accはどのように埋め込まれていますか? – oekopez

答えて

0

また、ordered-setを試すこともできます。これはセットであり、注文されたものです。

関連する問題