Python 如何使用函数参数过滤函数输出
我想实现一个函数,它将另一个函数的输出作为一个参数,一个年份值(作为int),并输出给定给该函数的年份的注册数据。如果同一年(如2月和8月)的入学数据有多个条目,则必须计算每年入学人数的平均值(可以是非整数) 函数作为第一个参数使用的数据是元组列表。这是一个例子: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
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)
- 第三要素:年度水平(整数)
- 第四要素:入学人数(整数)
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”
不同。