MST

星途 面试题库

面试题:Python字典在复杂数据聚合中的应用

给定一个包含多个字典的列表,每个字典有'category'(类别)和'value'(数值)两个键值对。要求使用Python字典进行数据处理,按照'category'对'value'进行聚合,聚合方式为:如果是数值类型则求平均值,是字符串类型则拼接(用逗号分隔),并返回最终的聚合结果字典。
25.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
from collections import defaultdict


def aggregate_data(lst):
    result = defaultdict(lambda: {'count': 0, 'total': 0, 'strings': []})
    for d in lst:
        category = d['category']
        value = d['value']
        if isinstance(value, (int, float)):
            result[category]['count'] += 1
            result[category]['total'] += value
        elif isinstance(value, str):
            result[category]['strings'].append(value)

    final_result = {}
    for category, data in result.items():
        if data['count'] > 0:
            final_result[category] = data['total'] / data['count']
        if data['strings']:
            final_result[category] = ','.join(data['strings']) if 'count' not in final_result[category] else \
                str(final_result[category]) + ',' + ','.join(data['strings'])
    return final_result


你可以使用以下方式调用这个函数:

data = [
    {'category': 'A', 'value': 1},
    {'category': 'A', 'value': 2},
    {'category': 'B', 'value': 'apple'},
    {'category': 'B', 'value': 'banana'},
    {'category': 'A', 'value': 3}
]
print(aggregate_data(data))

代码解释

  1. 初始化结果字典
    • 使用defaultdict来初始化result字典,defaultdict的默认值是一个字典,这个字典用于记录每个类别下数值的计数和总和,以及字符串的列表。
  2. 遍历数据列表
    • 对于每个字典,根据category来更新result字典。如果value是数值类型,更新计数和总和;如果是字符串类型,将其添加到字符串列表中。
  3. 生成最终结果
    • 遍历result字典,对于有数值的类别,计算平均值;对于有字符串的类别,将字符串拼接起来。如果一个类别既有数值又有字符串,先将数值转为字符串再与字符串拼接。
  4. 示例调用
    • 定义一个示例数据列表并调用aggregate_data函数输出结果。