Python中按日期、姓名及员工ID合并字典列表
问题:按员工、日期整合字典数据
原始数据
data = [{"average": 2, "day": "2022-01-01", "name": "joe", "employee_id": 1}, {"average": 3, "day": "2022-01-02", "name": "joe", "employee_id": 1}, {"average": 9, "day": "2022-01-03", "name": "joe", "employee_id": 1}, {"sum": 13, "day": "2022-01-01", "name": "joe", "employee_id": 1}, {"sum": 15, "day": "2022-01-02", "name": "joe", "employee_id": 1}, {"sum": 0, "day": "2022-01-03", "name": "joe", "employee_id": 1}, {"average": 1, "day": "2022-01-01", "name": "bob", "employee_id": 2}, {"average": 3, "day": "2022-01-02", "name": "bob", "employee_id": 2}, {"sum": 9, "day": "2022-01-01", "name": "bob", "employee_id": 2}, {"sum": 8, "day": "2022-01-02", "name": "bob", "employee_id": 2}]
期望输出
output = [{"name": "joe", "employee_id": 1, "day": "2022-01-01", "average": 2, "sum": 13}, {"name": "joe", "employee_id": 1, "day": "2022-01-02", "average": 3, "sum": 15}, {"name": "joe", "employee_id": 1, "day": "2022-01-03", "average": 9, "sum": 0}, {"name": "bob", "employee_id": 2, "day": "2022-01-01", "average": 1, "sum": 9}, {"name": "bob", "employee_id": 2, "day": "2022-01-02", "average": 3, "sum": 8}]
原代码问题
你之前的代码仅用day作为字典的键,导致不同员工同一天的数据被覆盖——比如joe和bob在2022-01-01的数据会共用同一个键,后处理的条目会覆盖先处理的,最终丢失其中一个员工的信息。
解决方案
需要用name、employee_id、day三者的组合作为唯一键,这样能区分不同员工的每一天数据,确保每个条目都能被正确整合:
output = {} for item in data: # 用(name, employee_id, day)的元组作为唯一标识键 key = (item["name"], item["employee_id"], item["day"]) if key not in output: output[key] = {} # 合并当前条目到对应字典 output[key].update(item) # 将字典的值转换为列表,得到最终结果 result = list(output.values()) print(result)
代码说明
- 元组
(name, employee_id, day)可以作为字典的键(因为元组是不可变类型),确保每个员工的每一天都有独立的条目; update()方法会自动合并键值对:如果键已存在则覆盖值,不存在则添加新的键值对;- 最后将字典的values转换为列表,就是你需要的整合结果。
内容的提问来源于stack exchange,提问作者getunstuck
相关产品推荐
相关产品推荐

