Python 如何使用函数参数过滤函数输出

Python 如何使用函数参数过滤函数输出,python,python-3.x,Python,Python 3.x,我想实现一个函数,它将另一个函数的输出作为一个参数,一个年份值(作为int),并输出给定给该函数的年份的注册数据。如果同一年(如2月和8月)的入学数据有多个条目,则必须计算每年入学人数的平均值(可以是非整数) 函数作为第一个参数使用的数据是元组列表。这是一个例子: Original data = [ ('2009-02-01', 'Ainslie School', 6, 46), ('2009-02-01', 'Ainslie School', 0, 65), ('200

我想实现一个函数,它将另一个函数的输出作为一个参数,一个年份值(作为int),并输出给定给该函数的年份的注册数据。如果同一年(如2月和8月)的入学数据有多个条目,则必须计算每年入学人数的平均值(可以是非整数)

函数作为第一个参数使用的数据是元组列表。这是一个例子:

Original data = [
    ('2009-02-01', 'Ainslie School', 6, 46),
    ('2009-02-01', 'Ainslie School', 0, 65),
    ('2009-02-01', 'Ainslie School', 0, 49),
    ('2009-02-01', 'Ainslie School', 1, 44),
    ('2009-02-01', 'Ainslie School', 4, 57),
    ('2009-02-01', 'Ainslie School', 3, 64)
    ]
  • 第一个元组元素:日期(str)
  • 第二个元组元素:学校名称(str)
  • 第三要素:年度水平(整数)
  • 第四要素:入学人数(整数)
我尝试使用列表理解来过滤掉日期,只包含那些与传递给函数调用的year参数相匹配的内容

例如:

target_year = '2019'
enrolment_data = # Output from the first function, i.e. list of 4-item tuples.
这是我试图用于按年份筛选元组的列表:

result = [result_tuple[1:4] for result_tuple in enrolmen_data if (result_tuple[0][0:4] == target_year)]

print("Data: " + str(result))
Out >>> [('Ainslie School', 6, 46), ('Ainslie School', 0, 65), ('Ainslie School', 0, 49), ('Ainslie School', 1, 44)]
这是功能代码:

def get_yearly_enrolment(enrolment, year, levels=[]):
    """Takes enrolment data (returned by the read_enrolment_data function)
    and returns a dictionary with keys being school names, and values being
    the enrolment numbers for the year of census totalled over year levels
    given by levels; if the census year has multiple data (eg, for
    February and August), a mean value of enrolment numbers for that year is used.
    """

    enrolment = read_enrolment_data('Census_Data_for_all_ACT_Schools.csv')
    enrol_data = [result_tuple[1:4] for result_tuple in enrolment if (result_tuple[0][0:4] == year)]

    result_dict = {}
    for line in enrol_data:
        key = line[0]
        enrolment_number_value = line[2]
        result_dict[key] = enrolment_number_value
    return result_dict

新函数的预期输出是返回一个字典,其中键是学校名称,值是传递给函数的年份的注册号。如果普查年度有多个数据(例如,2月和8月),则使用该年度入学人数的平均值

当我调用新函数时,我看到的唯一输出是一个KeyError

def test_get_yearly_enrolment():
        schools = [
            ('2009-01-01', 'Ainslie School',  1,  46),
            ('2015-01-01', 'Ainslie School',  1,  52),
            ('2011-01-01', 'Amaroo School',  6, 116),
            ('2011-01-01', 'Aranda Primary School',  3,  57),
            ('2013-01-01', 'Bonython Primary School',  3,  47),
            ('2014-01-01', 'Mount Stromlo High School', 10, 176),
            ('2011-01-01', 'Yarralumla Primary School',  2,  31)
        ]

        res = get_yearly_enrolment(schools, 2011, [2,3])
>       assert res['Aranda Primary School'] == 57.0
E       KeyError: 'Aranda Primary School'



你在让我们猜错误发生在哪里。请更新此问题以包含完整的错误回溯消息。您需要设置一个或至少包含带有回溯的完整错误消息。
inclution
参数到
get\u yearly\u inclution()
是无用的,因为您在函数中覆盖了该变量。另外,当这个变量没有被使用时,为什么这个函数还要费心定义
注册数据呢?@johngordon干杯,我已经解决了这个问题。希望更新的版本能有所帮助。您将
year
作为整数传递给
get\u yearly\u inclusion()
,但函数使用它的方式是,它希望它是一个字符串。整数
2011
与字符串
“2011”
不同。您让我们猜测错误发生在哪里。请更新此问题以包含完整的错误回溯消息。您需要设置一个或至少包含带有回溯的完整错误消息。
inclution
参数到
get\u yearly\u inclution()
是无用的,因为您在函数中覆盖了该变量。另外,当这个变量没有被使用时,为什么这个函数还要费心定义
注册数据呢?@johngordon干杯,我已经解决了这个问题。希望更新的版本能有所帮助。您将
year
作为整数传递给
get\u yearly\u inclusion()
,但函数使用它的方式是,它希望它是一个字符串。整数
2011
与字符串
“2011”
不同。