2

次のような、多くの列を含む大きな CSV ファイルがあります。

id, col1, col2, col3, col4, col5
1, a, b, 2, d, e
2, b, c, 4, e, f
3, c, d, 6, f, g

特定の列のみを使用する辞書を作成できるようにしたいと考えています。たとえば、辞書には ID 番号、col2、および col3 があります。さらに、col2 に最大 10 個の数値を持つ行のみを格納する必要があります。これは私が持っているコードです:

import csv 
reader = csv.DictReader(open('SNPs.csv', newline=''), delimiter=',', quotechar='"')

しかし、特定の列を無視するように指示する方法がわかりません。また、max() を使用して複数の値を返すことができるとは思いません。

max(2, 4) returns 4. 

編集 ダニエルのコードを使用してみましたが、何らかの理由でソート機能が正しく機能しません。(ソートの代わりに逆ソートを使用する必要もあります)。4 つの異なるキーのみを出力し、さらに、それらは実際には降順で並べ替えられていません。また、ヘッダーを値の 1 つとして返します。

import csv
f = open('SNPs.csv', "rU")
reader = csv.reader(f)
output = [row for row in reader]
output.sort(key=lambda x: x[32], reverse=True)
print dict((row[10], (row[11], row[8], row[32])) for row in output[:10])
4

2 に答える 2

2

col2数字はありません。という意味だったと思いますcol3

すべてを読むまで、col3 の上位 10 の数字がどれかはわかりません。いずれにせよそれを行うつもりなので、すべてを読んでから、上位 10 を抽出することもできます。したがって、次のようなことができます。

output = []
for row in reader:
    output.append(dict(k, v) for k, v in row if k in ('id', 'col2', 'col3'))
output.sort(key=lambda x: x['col3'])
return output[:10]

編集今、私はあなたが望む出力を見ました.あなたは私が想像したものとはまったく異なるものを望んでいます. 実際、ここでは DictReader はまったく意味がないので、通常の Reader で書き直します。

f = open('SNPs.csv')
reader = csv.Reader(f, delimiter=',', quotechar='"')
output = [row for row in reader]
output.sort(key=lambda x: x[3])
return dict((row[0], (row[3], row[4])) for row in output[:10])
于 2012-11-04T21:39:58.450 に答える