Как создать список словарей из файла CSV без понимания списка - PullRequest
0 голосов
/ 15 февраля 2019

Выходные данные должны быть такими:

[{'id': '1', 'first_name': 'Heidie','gender': 'Female'}, {'id': '2', 'first_name': 'Adaline', 'gender': 'Female'}, {...}

Существует фрагмент кода, который работает с этим требованием.

with open('./test.csv', 'r') as file_read:
   reader = csv.DictReader(file_read, skipinitialspace=True)
   listDict = [{k: v for k, v in row.items()} for row in reader]
   print(listDict)

Однако я не могу понять некоторые моменты оэтот код выше:

  1. Понимание списка: listDict = [{k: v for k, v in row.items()} for row in reader]
    • Как Python интерпретирует это?
    • Как компилятор всегда собирает список с заголовком (id, first_name, gender) и их значения?
    • Как будет реализована реализация этого кода с вложенным for

Iпрочитайте эти ответы, но я все еще не понимаю:

Мой CSV-файл:

id,first_name,last_name,email,gender
1,Heidie,Philimore,hphilimore0@msu.edu,Female
2,Adaline,Wapplington,awapplington1@icq.com,Female
3,Erin,Copland,ecopland2@google.co.uk,Female
4,Way,Buckthought,wbuckthought3@usa.gov,Male
5,Adan,McComiskey,amccomiskey4@theatlantic.com,Male
6,Kilian,Creane,kcreane5@hud.gov,Male
7,Mandy,McManamon,mmcmanamon6@omniture.com,Female
8,Cherish,Futcher,cfutcher7@accuweather.com,Female
9,Dave,Tosney,dtosney8@businesswire.com,Male
10,Torr,Kiebes,tkiebes9@dyndns.org,Male

1 Ответ

0 голосов
/ 15 февраля 2019

ваше понимание списка:

listDict = [{k: v for k, v in row.items()} for row in reader]

равно:

item_list = []

#go through every row
for row in reader:
    item_dict = {}
    #in every row go through each item
    for k,v in row.items():
        #add each items k,v to dict.
        item_dict[k] = v
    #append every item_dict to item_list
    item_list.append(item_dict)

print(item_list)

РЕДАКТИРОВАТЬ (некоторые дополнительные пояснения):

#lets create a list
list_ = [x ** 2 for x in range(0,10)]
print(list_)

это возвращает:

[0,1,4,9,16,25,36,49,64,81]

Вы можете написать это как:

 list_ = []
 for x in range(0,10):
     list_.append(x ** 2)

Итак, в этом примере да, вы читаете это «назад»

Теперь предположим следующее:

#lets create a list
list_ = [x ** 2 for x in range(0,10) if x % 2 == 0]
print(list_)

это возвращает:

[0,4,16,36,64]

Вы можете написать это как:

 list_ = []
 for x in range(0,10):
     if x % 2 == 0:
         list_.append(x ** 2)

Так что это не на 100% назад, но это должно быть логично, что происходит.Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...