2

データを抽出して変換するために、csv の行をループしています。

csv は次のようになります。

alex, blue, 3
alex, blue, 4
liza, green, 2
alex, red, 4
alex, orange, 3
liza, blue, 2
liza, blue, 21
liza, yellow, 23

上記から得たい結果は 2 つのファイルです。

アレックスファイル

<blue>3, 4</blue>
<red>4</red>
<orange>3</orange>

リザファイル

<green>2</green>
<blue>2,21</blue>
<yellow>23</yellow>

この問題を解決するためにあなたを探しているわけではありませんが、あなたのガイダンスを探しているだけです. xml 部分のヘルプは必要ありません。LOGIC 部分のヘルプが必要です。

本当にありがとう!

4

3 に答える 3

3

ここでの私の好みのデータ構造 (名前と色の順序は重要ではないと仮定します!) は、ネストされたdefaultdict. 通常の使用法は次のようなものです。

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d['blue'].append(3)
>>> d['blue'].append(4)
>>> d
defaultdict(<type 'list'>, {'blue': [3, 4]})

しかし、さらに 1 レベル深く進むこともできます。

>>> d = defaultdict(lambda: defaultdict(list))
>>> d
defaultdict(<function <lambda> at 0x1004bf9b0>, {})
>>> d['alex']['blue'].append(3)
>>> d['alex']['blue'].append(4)
>>> d['liza']['green'].append(2)
>>> d
defaultdict(<function <lambda> at 0x1004bf9b0>, {'liza': defaultdict(<type 'list'>, {'green': [2]}), 'alex': defaultdict(<type 'list'>, {'blue': [3, 4]})})
>>> d.keys()
['liza', 'alex']
>>> d['alex'].keys()
['blue']
>>> d['alex']['blue']
[3, 4]
于 2012-08-29T03:07:04.403 に答える
2

リストの辞書はどうですか?ディクショナリにないものが見つかるたびに、その要素のリストがディクショナリに追加されます。次に、繰り返し要素を辞書内のリストに追加するだけです。

入力例の結果の構造は次のようになります。

alex dictionary:
{
   "blue" : [3,4],
   "red": [4],
   "orange": [3]
}

liza dictionary:
{
   "green" : [2],
   "blue": [2,21],
   "yellow": [23]
}

もちろん、別の辞書レイヤーを使用して、liza と alex をさらに抽象化することもできます。

于 2012-08-29T02:59:54.803 に答える
1

alex ファイルと liza ファイルの両方について、一連のリスト (各色に 1 つ) を維持するのがおそらく最善でしょう。各色のエントリー数がわからないからです。したがって、基本的には、csv をループ処理し、alex と liza のどちらを扱っているかを判別し (最初の情報)、色を判別し (2 番目の情報)、整数値 (3 番目の情報) を適切なリスト。ファイルの処理が完了したら、2 つの出力ファイルを作成するのは難しくありません。

編集:もちろん、どの色に遭遇するか、または多数の色に遭遇するかわからない場合は、他の回答が示唆している辞書アプローチを使用するのがおそらく最も賢明でしょう。

于 2012-08-29T03:00:53.507 に答える