繁体   English   中英

CSV至Python字典,其中一个键具有多个列表

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

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