Python字典格式转换:字典推导式仅输出单个元素的问题排查
解决字典转换后部门仅显示单个姓名的问题
问题分析
你当前的代码存在两个核心问题:
- 字典推导式中,同一部门的后续条目会覆盖之前的列表——因为字典的键具有唯一性,每次遇到相同部门时,都会用当前姓名的新列表替换掉之前的列表,最终每个部门仅保留最后一个遍历到的姓名。
- 原字典中存在重复键
'Margo',后面的'Margo': 'HR'会覆盖前面的'Margo': 'IT',所以实际原字典里Margo的部门是HR。
正确的字典推导式实现
要实现{department: [name]}的格式,需先获取所有唯一部门,再为每个部门收集对应姓名:
orig_dict = {'Tom': 'HR', 'Ted': 'IT', 'Ken': 'Marketing', 'Jason': 'Marketing', 'Jesica': 'IT', 'Margo': 'IT', 'Margo': 'HR'} # 生成目标格式的字典 new_dict = {dept: [name for name, department in orig_dict.items() if department == dept] for dept in set(orig_dict.values())} # 获取IT部门的姓名列表并打印 it_names = new_dict['IT'] print(it_names) # 输出: ['Ted', 'Jesica']
代码说明
set(orig_dict.values()):提取原字典中所有不重复的部门名称,确保每个部门只被处理一次。- 内层列表推导式:遍历原字典的键值对,筛选出属于当前部门的所有姓名,组成完整的姓名列表。
- 外层字典推导式:将每个部门作为键,对应的姓名列表作为值,构建出符合要求的字典。
内容的提问来源于stack exchange,提问作者Ramūnas B.
相关产品推荐
相关产品推荐

