CSVファイルnames.csv
コンテンツがあります:
first_name last_name
Baked Beans
Lovely Spam
Wonderful Spam
私はそれを辞書のリストに読みたいです、最初の行はキーを含んでいます:
>>> import csv
>>> with open('names.csv') as csvfile:
... reader = csv.DictReader(csvfile)
... for row in reader:
... print(row['first_name'], row['last_name'])
...
Baked Beans
Lovely Spam
Wonderful Spam
しかし、reader
csv.DictReader
? reader
を辞書のリストに変換するにはどうすればよいですか?ありがとう。
import csv
with open("in.csv") as csvfile:
reader = csv.DictReader(csvfile,delimiter=" ")
print(list(reader))
[{'first_name': 'Baked', 'last_name': 'Beans'}, {'first_name': 'Lovely', 'last_name': 'Spam'}, {'first_name': 'Wonderful', 'last_name': 'Spam'}]
区切り文字が実際に,
でない場合は、" "
またはそれが何かを指定する必要があります。
混乱を避けるために、コードはpython3.6でも正常に動作します。唯一の違いは、デフォルトで DictReader を使用すると Orderdicts が得られることです。
In [1]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: print(list(reader))
...:
[OrderedDict([('first_name', 'Baked'), ('last_name', 'Beans')]), OrderedDict([('first_name', 'Lovely'), ('last_name', 'Spam')]), OrderedDict([('first_name', 'Wonderful'), ('last_name', 'Spam')])]
まったく同じキーにアクセスできます。OrderedDict
はキーの挿入順序を保持します。
In [2]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: for dct in reader:
...: print(f"{dct['first_name']} {dct['last_name']}")
...:
...:
Baked Beans
Lovely Spam
Wonderful Spam
どのpy3.6も実際に行うので、何らかの理由で実際に辞書が必要な場合:
In [5]: import csv
...: with open("in.csv") as csvfile:
...: reader = csv.DictReader(csvfile, delimiter=" ")
...: for dct in map(dict, reader):
...: print(dct)
...: print(f"{dct['first_name']} {dct['last_name']}")
...:
...:
{'first_name': 'Baked', 'last_name': 'Beans'}
Baked Beans
{'first_name': 'Lovely', 'last_name': 'Spam'}
Lovely Spam
{'first_name': 'Wonderful', 'last_name': 'Spam'}
Wonderful Spam
Py3.6での挿入時の順序保持は実装の詳細であり、変更される可能性がありますが、十分に使用する場合はそのままにしておく必要があります: )
list()
を使用します。
print(list(reader))
デモ:
>>> with open('names.csv') as csvfile:
... reader = csv.DictReader(csvfile, delimiter=" ")
... print(list(reader))
...
[{'first_name': 'Baked', 'last_name': 'Beans'}, {'first_name': 'Lovely', 'last_name': 'Spam'}, {'first_name': 'Wonderful', 'last_name': 'Spam'}]