[英]Read CSV into dictionary, using one column as dict index
我正在尝试将此 CSV 文件读入字典,以便稍后我可以快速引用数据:
ID,Field1,Field2,Field3
1,DataF1,DataF2,DataF3
2,MoreDataF1,MoreDataF2,MoreDataF3
3,SomeMoreDataF1,SomeMoreDataF2,SomeMoreDataF3
“ID”值在文件中是唯一的,因此我想将其用作字典的索引,其元素将是具有其他值的字典。 我希望能够引用myDict[2]["Field3"]
并检索MoreDataF3
实现这一目标的最pythonic方法是什么?
我能够这样做:
import csv
with open("file.csv", mode='r') as csvfile:
csv_reader = csv.reader(csvfile.readlines(), delimiter=',')
next(csv_reader)
myDict = {}
for row in csv_reader:
myDict[int(row[0])] = {'Field1': row[1], 'Field2': row[2], 'Field3': row[3]}
但是随着字段数量的增加并且不能是动态的,这很快变得可怕。 我也玩过DictReader
,但它最终变得更加麻烦。 我相信一定有更好的(更好的)方法。
您可以使用DictReader和 dict 理解来做到这一点。
import csv
import pprint
with open('file.csv', newline='') as f:
reader = csv.DictReader(f)
MyDict = {int(row.pop('ID')): row for row in reader}
pprint.pprint(MyDict)
输出:
{1: {'Field1': 'DataF1', 'Field2': 'DataF2', 'Field3': 'DataF3'},
2: {'Field1': 'MoreDataF1', 'Field2': 'MoreDataF2', 'Field3': 'MoreDataF3'},
3: {'Field1': 'SomeMoreDataF1',
'Field2': 'SomeMoreDataF2',
'Field3': 'SomeMoreDataF3'}}
dict comprehension使用dict.pop从每一行中删除 ID 键/值对以创建键,并使用行 dict 的其余部分作为值。
您可以使用 pandas 轻松阅读它
import pandas as pd
csv = pd.read_csv('file.csv')
print(csv)
产出
python test.py
ID Field1 Field2 Field3
0 1 DataF1 DataF2 DataF3
1 2 MoreDataF1 MoreDataF2 MoreDataF3
2 3 SomeMoreDataF1 SomeMoreDataF2 SomeMoreDataF3
更多信息请访问https://pandas.pydata.org/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.