Я могу предложить простой, элегантный и гибкий способ сделать это с помощью словаря, который может хранить значения в виде списка для дубликатов ключей.См. этот SO-ответ для такого словарного класса.Но реализация этого класса может отличаться, я не настаиваю на том, чтобы этот класс был лучшим.
import csv
import os
from itertools import groupby
class DictList(dict):
def __init__(self, iterable, **kwargs):
super(DictList, self).__init__()
for k, v in iterable:
self[k] = v
self.update(**kwargs)
def __setitem__(self, key, value):
try:
# Assumes there is a list on the key
self[key].append(value)
except KeyError: # if fails because there is no key
super(DictList, self).__setitem__(key, value)
except AttributeError: # if fails because it is not a list
super(DictList, self).__setitem__(key, [self[key], value])
with open('test.csv') as csv_file:
reader = csv.reader(csv_file, delimiter=',')
header = next(reader)
for row in reader:
variables = DictList(zip(header, row))
Это выводит:
{'some1': '1', 'letter': ['f', 'r', 'o', 'g'], 'some2': 'z'}
{'some1': 'q', 'letter': ['s', 'u', 'n', ''], 'some2': 'a'}
{'some1': 'a', 'letter': ['f', 'a', 'c', 'e'], 'some2': 'q'}
{'some1': 'z', 'letter': ['n', 'a', 'n', 'o'], 'some2': '1'}