2016-12-02 3 views
0

以下の機能は、フォーマットされたグレードタイプ、グレードタイプ番号、グレードのcsvファイルを取ります。例最初の10は割り当て、割り当て番号、等級です。この関数は、最初の10文字をリストに入れます。CSVファイルを変更して注文やデータを変更する

現時点では、それは順不同、譲渡番号、等級で印刷されていますが、グレード、譲渡、譲渡番号の順に印刷しようとしています。

def assigment(file): 
    res = [] 
    f = open(file,'r+') 
    reader = csv.reader(f) 
    for i, line in enumerate(reader): 
     if i < 10: 
     res.append((line[0],int(line[1]),int(line[2]))) 

     res.sort(key= lambda x: x[2]) 

    max = res[-1] 
    min = res[0] 

    print max 
    print min 
+0

'key = lambda x:x [2]'は 'operator.itemgetter(2)'に置き換えることができます。 'for i、enumerate(reader):i <10:'ならばitertools.islice(reader、10)の行に ':for'と書いてください。 –

+0

最初の10行だけを使用している場合は、なぜCVS全体を反復処理していますか? 'i'が10になったときに'中断 'します。また、 'append'の後に' res'をソートする理由は何ですか? –

答えて

0

出力データには2種類の並べ替えがあります。 1つは各行の項目の順序で、もう1つは行の順序です。

各行内の項目の順序は単にこの行に部分式の順序を変更し、この順序を変更するラインによって

res.append((. . .

制御されます。

行の順序を変更するには、非常に便利な方法は繰り返しソートすることです。最初に最も重要度の低い基準でソートし、最後に最も重要な基準でソートします。

各行の要素0でソートし、要素1の値でタイを区切り、残りのタイを要素2の値で区切りたい場合は、1つではなくコードで3行のソートを行います例えば、

res.sort(key= lambda x: x[2]) 
res.sort(key= lambda x: x[1]) 
res.sort(key= lambda x: x[0]) 

またはそれと同等のもの。 Pythonのソートは「安定」なので、たとえば、最終的なソートのステップは、最終的なソートのキーが同じであれば既存の順序付けをそのまま残します。

+0

なぜマルチプル(タプル)キーで1回だけではなく、3回ソートするのですか? –

+0

@Cristianタプルキーはもっと洗練されたアプローチでしょう。パフォーマンスを最大限に引き出すには、データセットの各レコードにキーを追加し、ソートしてから目的のデータだけを抽出したいと思うようです。これは説明が簡単だったようで、Terrの状況でパフォーマンスが重要な目標であることは疑わしいようでした。 –

関連する問題