我想实现一个函数,将另一个函数的输出作为一个参数,一个年份值(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)
]
我已经尝试使用列表理解来过滤掉日期,并且只包含那些与传递给函数调用的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'
目前没有回答
相关问题 更多 >
编程相关推荐