Python 如何在 csvReader 中使用高阶函数
How to use Higher Order Functions with csvReader in Python
您好,我正在尝试学习 python 中的高阶函数 (HOF)。我了解它们对 reduce、map 和 filter 的简单用途。但是在这里我需要创建一个元组,包含自行车来来往往的站点,并将这些站点的事件数量作为第二个值。现在注释掉的代码是用普通函数完成的(我把它留作字典,但很容易转换成元组)。
但我已经绞尽脑汁一段时间了,无法使用 HOF 让它工作。我现在的想法是以某种方式使用 map 通过 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)
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)
您好,我正在尝试学习 python 中的高阶函数 (HOF)。我了解它们对 reduce、map 和 filter 的简单用途。但是在这里我需要创建一个元组,包含自行车来来往往的站点,并将这些站点的事件数量作为第二个值。现在注释掉的代码是用普通函数完成的(我把它留作字典,但很容易转换成元组)。
但我已经绞尽脑汁一段时间了,无法使用 HOF 让它工作。我现在的想法是以某种方式使用 map 通过 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)
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)