Вы бы лучше служили с вложенным словарем:
rates={'Alabama':{'Single rate':['0.02', '0.04', '5'],
'Single bracket': ['500', '3000'],
'Couple rate': ['0.02', '0.04', '0.05'],
'Couple bracket': ['1000', '6000']}}
print(rates['Alabama']['Couple rate'])
# ['0.02', '0.04', '0.05']
Предполагая, что файл CDV выглядит следующим образом:
'Alabama', 'Single rate', '0.02', '0.04', '5'
'Alabama', 'Single bracket', '500', '3000'
'Alabama', 'Couple rate', '0.02', '0.04', '0.05'
'Alabama', 'Couple bracket', '1000', '6000'
Вы можете построить вложенный Словарь следующим образом:
import csv
rates={}
with open(ur_file) as f:
for line in csv.reader(f, skipinitialspace=True, quotechar="'"):
rates.setdefault(line[0],{})[line[1]]=[float(e) for e in line[2:]]
print(rates)
Печать:
{'Alabama': {'Couple rate': [0.02, 0.04, 0.05],
'Single rate': [0.02, 0.04, 5.0],
'Single bracket': [500.0, 3000.0],
'Couple bracket': [1000.0, 6000.0]}}
Редактировать
Как было отмечено в комментариях, три уровня вложенным ДИКТ, вероятно, лучше, как эта структура данных:
rates={'Alabama':{'Single': {'rate':['0.02', '0.04', '5'],
'bracket': ['500', '3000']},
'Couple': {'rate': ['0.02', '0.04', '0.05'],
'bracket': ['1000', '6000']}}}
В то время как тривиально использовать defaultdict или setdefault, чтобы иметь дело с двухуровневым типом с отсутствующими ключами, требуется немного больше, чтобы элегантно справляться с несколькими уровнями.
Мой любимый использовать Perl как autovivification подкласс Словаре следующим образом:
class AutoVivify(dict):
"""Implementation of perl's autovivification feature."""
def __missing__(self, item):
value = self[item] = type(self)()
return value
rates=AutoVivify()
with open(ur_file) as f:
for line in csv.reader(f, skipinitialspace=True, quotechar="'"):
state=line[0]
k1,k2=line[1].split()
rates[state][k1][k2]=[float(e) for e in line[2:]]
print(rates)
Печать:
{'Alabama': {'Single': {
'rate': [0.02, 0.04, 5.0],
'bracket': [500.0, 3000.0]},
'Couple': {
'rate': [0.02, 0.04, 0.05],
'bracket': [1000.0, 6000.0]}}}
Это не ясно из вашего поста, что точный формат 'cleaned_data' находится в . –
Вы должны построить (вложенный) словарь из этих данных. –
Если вы хотите иметь возможность делать это много раз с большим количеством данных, это именно то, для чего существуют базы данных. Модуль stdlib 'sqlite3' очень хорош. –