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

2024-09-23 22:21:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想实现一个函数,将另一个函数的输出作为一个参数,一个年份值(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)
  • 第三要素:年度水平(int)
  • 第四要素:入学人数(int)

我已经尝试使用列表理解来过滤掉日期,并且只包含那些与传递给函数调用的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'



Tags: the数据函数fordataresultyear元组