如何基于经理创建包含多站点的Python字典?
问题
我有如下txt文件内容:
Site1 Manager1 Site2 Manager2 Site3 Manager2 Site4 Manager3 Site5 Manager3 Site6 Manager3
可见部分经理对应多个站点,我需要基于经理创建字典,期望输出为:
{ 'Manager1': 'Site1', 'Manager2': ['Site2', 'Site3'], 'Manager3': ['Site4', 'Site5', 'Site6'] }
注:原期望输出存在语法错误,此处修正为合法的Python字典格式(单个值用字符串,多个值用列表存储)
当前脚本可运行,但输出是按站点分类的字典,而非按经理分类:
for key, value in allsiteDic.items(): rev_dict.setdefault(value, set()).add(key) result = [key for key, values in rev_dict.items() if len(values) > 1] print("duplicate values", str(result)) print(allsiteDic)
输出:
{'Site6': 'Manager3', 'Site4': 'Manager3', 'Site5': 'Manager3', 'Site2': 'Manager2', 'Site3': 'Manager2', 'Site1': 'Manager1'}
解决方案
要实现按经理分组站点的需求,可通过读取文件内容并逐行解析构建目标字典:
# 初始化空字典 manager_sites = {} # 读取目标文本文件(替换为你的实际文件名) with open('sites.txt', 'r') as file: for line in file: # 分割每行的站点和经理,去除首尾空白字符 site, manager = line.strip().split() # 为经理添加对应站点:若经理不在字典中,先创建空列表 if manager not in manager_sites: manager_sites[manager] = [] manager_sites[manager].append(site) # 可选:将单个站点的条目从列表转为字符串,贴合期望格式 for manager, sites in manager_sites.items(): if len(sites) == 1: manager_sites[manager] = sites[0] # 打印最终结果 print(manager_sites)
运行输出
{'Manager1': 'Site1', 'Manager2': ['Site2', 'Site3'], 'Manager3': ['Site4', 'Site5', 'Site6']}
关键说明
- 使用
with open安全读取文件,避免资源泄漏; - 按行分割站点与经理字段,确保数据解析准确;
- 通过字典的键值关系实现经理到站点的分组;
- 可选步骤适配单个站点的格式需求,若不需要可直接删除该循环;
- 若希望多个站点用集合存储(去重),只需将空列表
[]替换为空集合set(),追加操作改用add()即可。
内容的提问来源于stack exchange,提问作者user15109593
相关产品推荐
相关产品推荐

