[英]CSV to Python Dictionary with multiple lists for one key
所以我有一个CSV格式的文件
data_a,dataA,data1,data11
data_b,dataB,data1,data12
data_c,dataC,data1,data13
, , ,
data_d,dataD,data2,data21
data_e,dataE,data2,data22
data_f,dataF,data2,data23
HEADER1,HEADER2,HEADER3,HEADER4
列标题位于底部,我希望第三列成为键。 您会看到两个数据块中的每个数据块的第三列都具有相同的值,并且这些数据块由空值分隔,因此我想将3行值存储到此1键中,而忽略诸如作为第4列。这是我的代码
#!usr/bin/env python
import csv
with open("example.csv") as f:
readCSV = csv.reader(f)
for row in readCSV:
# disregard separating rows
if row[2] != '':
myDict = {row[2]:[row[0],row[1]]}
print(myDict)
我基本上想要的是当我打电话时
print(myDict['data2'])
我懂了
{[data_d,dataD][data_e,dataE][data_f,dataF]}
我尝试编辑我的if循环到
if row[2] == 'data2':
myDict = {'data2':[row[0],row[1]]}
并为每个单独的键都做一个if,但是我认为这不会起作用。
我不是超级Python极客,但我建议使用pandas( import pandas as pd
)。 因此,您可以使用pd.read_csv(file, header)
加载数据。 使用header
您可以指定要作为标头的行,然后使用数据集进行操作要容易得多(例如,删除vars( del df['column_name']
),创建字典等)。
这是pd.read_csv
文档: https : pd.read_csv
使用当前方法,您可能需要defaultdict 。 这是一个类似于字典的对象,如果该键尚不存在,它将提供默认值。 因此,在您的情况下,我们将其设置为一个列表,然后对于循环通过的每一行,将元组0和1中的值作为元组附加到此列表中,如下所示:
import csv
from collections import defaultdict
data = defaultdict(list)
with open("example.csv") as f:
readCSV = csv.reader(f)
for row in readCSV:
# disregard separating rows
if row[2] != '':
data[row[2]].append((row[0], row[1]))
print(data)
在提供示例的情况下,这将打印带有以下条目的defaultdict
:
{'data1': [('data_a', 'dataA'), ('data_b', 'dataB'), ('data_c', 'dataC')], 'data2': [('data_d', 'dataD'), ('data_e', 'dataE'), ('data_f', 'dataF')]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.