Как использовать функции высшего порядка с csvReader в Python
Привет, я пытаюсь изучить функции высшего порядка (HOF) в Python. Я понимаю их простое использование для уменьшения, отображения и фильтрации. Но здесь мне нужно создать кортеж из станций, с которых ездили и уходили велосипеды, с количеством событий на этих станциях в качестве второго значения. Теперь закомментированный код выполняется обычными функциями (я оставил его как словарь, но его легко преобразовать в кортеж).
Но я некоторое время ломал голову и не могу заставить его работать с помощью HOF. Моя идея прямо сейчас - как-то использовать карту, чтобы пройти через csvReader и добавить в словарь. Почему-то не понимаю, что здесь делать. Любая помощь в понимании того, как правильно использовать эти функции, будет полезна.
import csv
#def stations(reader):
# Stations = {}
# for line in reader:
# startstation = line['start_station_name']
# endstation = line['end_station_name']
# Stations[startstation] = Stations.get(startstation, 0) + 1
# Stations[endstation] = Stations.get(endstation, 0) + 1
# return Stations
Stations = {}
def line_list(x):
l = x['start_station_name']
l2 = x['end_station_name']
Stations[l] = Stations.get(l, 0) + 1
Stations[l2] = Stations.get(l2, 0) + 1
return dict(l,l2)
with open('citibike.csv', 'r') as fi:
reader = csv.DictReader(fi)
#for line in reader:
output = list(map(line_list,reader))
#print(listmap)
#output1[:10]
print(output)
1 ответ
list(map(...))
создает список результатов, а не словарь.
Если вы хотите заполнить словарь, вы можете использовать reduce()
, используя словарь как аккумулятор.
from functools import reduce
def line_list(Stations, x):
l = x['start_station_name']
l2 = x['end_station_name']
Stations[l] = Stations.get(l, 0) + 1
Stations[l2] = Stations.get(l2, 0) + 1
return Stations
with open('citibike.csv', 'r') as fi:
reader = csv.DictReader(fi)
result = reduce(line_list, reader, {})
print(result)