繁体   English   中英

将 CSV 读入字典,使用一列作为字典索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM