使用Python';CSV上的高阶函数

使用Python';CSV上的高阶函数,python,csv,higher-order-functions,Python,Csv,Higher Order Functions,我有一个包含45000行的csv,相当于7天的数据量。它已按日期时间排序,最早的记录排在第一位 一旦csv被传递到csv模块的DictReader,这是一个示例行: {'end': '423', 'g': '2', 'endid': '17131', 'slat': '40.7', 'endname': 'Horchata', 'cid': '1', 'startname': 'Sriracha', 'startid': '521', 'slon': '-73.9', 'usertype': '

我有一个包含45000行的csv,相当于7天的数据量。它已按日期时间排序,最早的记录排在第一位

一旦csv被传递到
csv
模块的
DictReader
,这是一个示例行:

{'end': '423', 'g': '2', 'endid': '17131', 'slat': '40.7', 'endname': 'Horchata', 'cid': '1', 'startname': 'Sriracha', 'startid': '521', 'slon': '-73.9', 'usertype': 'Sub', 'stoptime': '2015-02-01 00:14:00+00', 'elong': '-73.9', 'starttime': '2015-02-01 00:00:00+00', 'elat': '40.7', 'dur': '801', 'meppy': '', 'birth_year': '1978'}
…还有一个:

{'end': '418', 'g': '1', 'endid': '17108', 'slat': '40.7', 'endname': 'Guacamole', 'cid': '1', 'startname': 'Cerveza', 'startid': '519', 'slon': '-73.9', 'usertype': 'Sub', 'stoptime': '2015-02-01 00:14:00+00', 'elong': '-73.9', 'starttime': '2015-02-02 00:00:00+00', 'elat': '40.7', 'dur': '980', 'meppy': '', 'birth_year': '1983'}
我最近写了下面的代码。它在csv中运行(在它被传递到
DictReader
之后)。代码根据
starttime
,生成每个新的一天的第一行,即当一天发生变化时:

dayList = []
def first_ride(reader):
        for row in reader:
            starttime = dateutil.parser.parse(row['starttime'])
            if starttime.day not in dayList:
                day_holder.append(starttime.day)
                yield row        
            else: 
                pass
我现在的目标是从七条记录中的每一条记录中生成一个包含与
出生年份
相关的值的列表,即:

[1992、1967、1988、1977、1989、1953、1949]

关键是我想了解如何最大限度地使用Python的HOFs(即
map
/
reduce
,很可能是
filter
),而不使用生成器(当前在我的代码中使用),也不使用全局变量。为了消除全局变量,我猜测每个
starttime
的日期都必须与之前的日期进行比较,但不使用列表,因为我目前已经设置了它。最后,我运行Python2.7


我非常感谢任何捐赠的专业知识。

您可以将
日期列表
缩减为
出生年份列表

reduce(lambda r, d: r + [d['birth_year']], dayList, [])
或者您可以使用理解(首选):


你的问题到底是什么?这不是辅导服务。这听起来是熊猫的理想工作,你为什么要找reduce呢?另外,您的else通行证是冗余的,因为列表是按时间排序的,所以请使用itertools.groupby按天或年进行聚合。
[d['birth_year'] for d in dayList]