0

嗨,我正在尝试在 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)
4

1 回答 1

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)
于 2020-02-21T00:55:00.283 回答