LINUX.ORG.RU

Python - создание list of dicts в цикле

 , ,


1

2

Подскажите пожалуйста, возможно ли реализовать такую конструкцию?

Сейчас код выглядит так:

import unicodecsv as csv

file_path = 'main.csv'

def csv_reader(csv_file_name):
    with open(csv_file_name, 'rb') as csvfile:
        reader = csv.DictReader(csvfile)
        csv_list = []
        for row in reader:
            csv_list.append({'FirstName':row['FileName'], 'SecondName':row['SecondName']})
            print(row['FileName'], row['SecondName'])
    return csv_list
  
el_list = csv_reader(file_path)

Так хочется что бы выглядел код:

import unicodecsv as csv

file_path = 'main.csv'
output_fields = ['FileName', 'SecondName']

def csv_reader(csv_file_name, output_fields):
    with open(csv_file_name, 'rb') as csvfile:
        reader = csv.DictReader(csvfile)
        csv_list = []
        for row in reader:
            csv_list.append(dict(zip(output_fields[::1], row[output_fields[::1]])))
            print(row[e] for e in output_fields)
    return csv_list
  
el_list = csv_reader(file_path, output_fields)

т.е. основная задача при вставке в список элемента (каждый элемент это словарь) генерировать словарь исходя из списка ключей словаря, который передается параметром. Имена ключей словаря и мена полей - совпадают.

  for row in reader:
            csv_list.append({'FirstName':row['FileName'], 'SecondName':row['SecondName']})
            print(row['FileName'], row['SecondName'])

       for row in reader:
            csv_list.append(dict(zip(output_fields[::1], row[output_fields[::1]])))
            print(row[e] for e in output_fields)