繁体   English   中英

从文件列和行标题创建嵌套字典

[英]Create nested dictionary from file column and row headers

我有一个 csv 文件,我想根据第一行和第一列查询结果。 给定一个看起来像的 csv:

subj_id, Sample1, Sample2, Sample3
XXX, 1, 2, 3
YYY, 4, 5, 6
ZZZ, 7, 8, 9

我想使用subj_idSampleN来查询值。 例如:

dct['XXX']['Sample1'] = 1, dct['YYY']['Sample2'] = 5

我曾尝试使用csv.DictReader ,但没有成功。 如何创建像上面这样的字典? (注意:我使用的是 python 3.6,因为我看到 DictReader 因 python 版本而略有不同。)

我的尝试基于这个 SO question ,开始是:

import csv
from collections import defaultdict

dct = defaultdict(dict)

with open('toy_out_test_results.csv', 'r') as csv_file:
    for row in csv.DictReader(csv_file, fieldnames=['subj_id','Sample1','Sample2','Sample3']):
        dct[row['subj_id']][row['???']] =     

但我在这里遇到了障碍。

您可以根据可以从行中弹出的row['subj_id']值将行字典分配给dct字典:

import csv

dct = {}

with open('toy_out_test_results.csv', 'r') as csv_file:
    for row in csv.DictReader(csv_file):
        dct[row.pop('subj_id')] = row

print(dct['XXX']['Sample1']) # => '1'

这假设 CSV 没有额外的空格:

subj_id,Sample1,Sample2,Sample3
XXX,1,2,3
YYY,4,5,6
ZZZ,7,8,9

请注意,重复的subj_id将被最后一次看到的覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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