如何从含重复用户的字典列表生成合并位置的Excel表格?
解决方法
先修复数据合并逻辑
你的原代码存在几个关键问题:仅靠UserName判断用户、location是字符串无法直接使用append、循环逻辑错误。正确的思路是用**(用户名+邮箱)**作为唯一标识进行分组,收集同一用户的所有location后再合并成字符串。
步骤1:合并重复用户的location
# 你的原始数据(示例) dict_list = [ {'UserName': 'name', 'Email': 'email@email.com', 'location': 'x'}, {'UserName': 'name', 'Email': 'email@email.com', 'location': 'y'}, {'UserName': 'another', 'Email': 'another@mail.com', 'location': 'c'} ] # 用字典分组:键是(UserName, Email)元组,值是location列表 user_map = {} for entry in dict_list: # 用用户名+邮箱作为唯一标识键 user_key = (entry['UserName'], entry['Email']) if user_key not in user_map: # 首次出现该用户,初始化location列表 user_map[user_key] = [] # 添加当前location到对应列表 user_map[user_key].append(entry['location']) # 转换成目标格式的列表 target_data = [] for (name, email), locations in user_map.items(): # 把location列表转成逗号分隔的字符串 merged_loc = ', '.join(locations) target_data.append({ 'name': name, 'email': email, 'location': merged_loc })
步骤2:导出到Excel
新手推荐用pandas库,代码更简洁:
import pandas as pd # 把目标数据转成DataFrame格式 df = pd.DataFrame(target_data) # 导出到Excel,index=False表示不保存行索引 df.to_excel('用户位置表.xlsx', index=False)
如果不想用pandas,也可以用openpyxl实现:
from openpyxl import Workbook wb = Workbook() ws = wb.active # 写入表头 ws.append(['name', 'email', 'location']) # 逐行写入数据 for row in target_data: ws.append([row['name'], row['email'], row['location']]) # 保存文件 wb.save('用户位置表.xlsx')
原代码的问题说明
- 用户判断逻辑错误:你需要同时匹配
UserName和Email才是同一用户,原代码仅判断了UserName - 数据类型错误:原始数据里的
location是字符串,直接调用append会抛出AttributeError,必须用列表存储多个location - 循环逻辑错误:内层循环遍历
filtered_List时,只要第一个元素不匹配就直接添加新条目,没有检查完所有已存在的用户;而且当filtered_List为空时,内层循环不会执行,第一个用户根本无法被添加
内容的提问来源于stack exchange,提问作者Zilvinas Dauknys
相关产品推荐
相关产品推荐

