在python中打开csv文件以自定义词典

在python中打开csv文件以自定义词典,python,csv,dictionary,Python,Csv,Dictionary,我想知道如何加载此csv文件: Epitope,ID,Frequency,Assay AVNIVGYSNAQGVDY,123431,27.0,Tetramer DIKYTWNVPKI,887473,50.0,3H LRQMRTVTPIRMQGG,34234,11.9,Elispot 进入python字典,如下所示: d = {'AVNIVGYSNAQGVDY': [ID[123431],Frequency[27.0],Assay['Tetramer']], 'DIKYTWNVPKI':

我想知道如何加载此csv文件:

Epitope,ID,Frequency,Assay

AVNIVGYSNAQGVDY,123431,27.0,Tetramer

DIKYTWNVPKI,887473,50.0,3H

LRQMRTVTPIRMQGG,34234,11.9,Elispot
进入python字典,如下所示:

d = {'AVNIVGYSNAQGVDY': [ID[123431],Frequency[27.0],Assay['Tetramer']], 'DIKYTWNVPKI': [ID[887473],Frequency[50.0],Assay['3H']], 'LRQMRTVTPIRMQGG': [ID[34234],Frequency[11.9],Assay['Elispot']]}
['AVNIVGYSNAQGVDY', '123431', '27.0', 'Tetramer']

我正在使用列表,因为我的实际文件更大,我将向这些列表附加更多值

首先,你知道这个模块吗?如果没有,请阅读介绍和示例,了解如何获得可数行。把每一张打印出来,它们看起来像这样:

d = {'AVNIVGYSNAQGVDY': [ID[123431],Frequency[27.0],Assay['Tetramer']], 'DIKYTWNVPKI': [ID[887473],Frequency[50.0],Assay['3H']], 'LRQMRTVTPIRMQGG': [ID[34234],Frequency[11.9],Assay['Elispot']]}
['AVNIVGYSNAQGVDY', '123431', '27.0', 'Tetramer']
或者,如果您使用
读写器

{'Epitope': 'AVNIVGYSNAQGVDY', 'ID': '123431', 
 'Frequency': '27.0', 'Assay': 'Tetramer'}
但是你不想要一个列表,或者一个字典列表;您需要一个列表字典,其中每个键是一行中的
表位
,对应的值是其他三个值,对吗?所以…只需将每一行插入字典即可:

d = {}
with open(path, 'rb') as f:
    with csv.DictReader(f) as reader:
        for row in reader:
            d[row['Epitope']] = [row['ID'], row['Frequency'], row['Assay']]
(如果使用普通的
读卡器
而不是
读卡器
,这将更加紧凑,但我认为如果几个月后再回到代码上来,这种方式会更具可读性。)

您还希望转换这些值并将它们用作另一个查找的键,但这应该很简单。例如:

            row_id = ID[int(row['ID'])]
            row_frequency = Frequency[float(row['Frequency'])]
            row_assay = Assay[row['Assay']]
            d[row['Epitope']] = [row_id, row_frequency, row_assay]
通过将行转换作为函数编写,然后使用字典理解,您可以稍微清理一下:

with open(path, 'rb') as f:
    with csv.DictReader(f) as reader:
        d = {row['Epitope']: process_row(row) for row in reader}