0

Pythonで印刷すると、次のようになるいくつかの行のデータを含むCSVファイルがあります。

['1', 'George Washington', '1789-04-30', '1797-03-04', 'Independent ', 'Virginia']
['2', 'John Adams', '1797-03-04', '1801-03-04', 'Federalist ', 'Massachusetts']
['3', 'Thomas Jefferson', '1801-03-04', '1809-03-04', 'Democratic-Republican ', 'Virginia']
['4', 'James Madison', '1809-03-04', '1817-03-04', 'Democratic-Republican ', 'Virginia']

これらの 4 行をもう一度印刷する必要がありますが、今回は 2 番目の要素で並べ替えます。私はこのコードを試しました:

import csv
csvdata=csv.reader(file('presidents.csv'))
for i in csvdata:
    i[1].sort()
    print i

しかし、うまくいきません。

4

2 に答える 2

4

まず、 ではopenなく andを使用する必要がありますfile。何かを並べ替えるには、並べ替えるもののコレクションを指定する必要があります。代わりにこのバージョンを試してください:

with open('presidents.csv') as f:
   csvdata = csv.reader(f)
   rows = list(csvdata)

# sort the rows in-place

rows.sort(key=lambda x: x[1])

print rows

カスタム ルックアップを提供する必要がありkeyます。これは、インライン関数 lambda が行うことです。これは基本的に、各内部リストの 2 番目の要素を使用して外部リストをソートするようにソート関数に指示します。

これは、並べ替えられたリストを返さないことを意味するsort()インプレース ソートであることに注意してくださいNone

rows = rows.sort(key=lambda x: x[1])

rowsになりますNone。ソートされていないリストとソートされたリストを分けたい場合は、 を使用sorted()しますが、次のように結果を割り当てるようにしてください。

sorted_rows = sorted(rows, key=lambda x: x[1]))
于 2013-03-17T21:17:18.117 に答える
1

Errrrm は、文字列を並べ替えようとしているようです ^_^ ここのドキュメントから: http://docs.python.org/2/library/csv.html

csvreader を反復処理すると、一度に 1 行ずつ取得されます... i[1].sort() i[1] = '1' (csv の最初の行の最初の値)

だからこれを試してください:

import csv
fh = open('presidents.csv','rt')
csvdata=csv.reader(fh)
for row in csvdata:
    row.sort()
    print row

編集-ファイルのことに気づきました:P

于 2013-03-17T21:19:49.503 に答える