Python字典转换:按区域分组对应站点ID生成新字典
代码错误原因
- 进入循环就直接执行
sites_dict[region] = [site_id],不管该区域之前是否有存储过站点ID,直接用新的单元素列表覆盖旧值,因此只会保留最后一个同区域的站点 - 后续的if判断逻辑无效,既没有对已有列表做追加操作,也没有合理处理新区域的初始化
修改方案
方案1:原生字典实现(无需导入额外模块)
def group_sites_by_region(sites_info): sites_dict = {} for site_id, site in sites_info.items(): city, region = site if region in sites_dict: # 区域已存在,追加当前站点ID sites_dict[region].append(site_id) else: # 区域不存在,初始化该区域的站点列表 sites_dict[region] = [site_id] return sites_dict
测试调用示例:
sites = { 42: ("Christchurch", "Canterbury"), 8472: ("Timaru", "Canterbury"), 11: ("Westport", "Westland") } print(group_sites_by_region(sites)) # 输出结果:{'Canterbury': [42, 8472], 'Westland': [11]}
方案2:使用collections.defaultdict简化代码
from collections import defaultdict def group_sites_by_region(sites_info): sites_dict = defaultdict(list) for site_id, site in sites_info.items(): _, region = site # 不需要使用城市名称时可以用下划线占位 sites_dict[region].append(site_id) return dict(sites_dict) # 转换为普通字典返回,和要求格式完全匹配
内容的提问来源于stack exchange,提问作者C.C.Randall
相关产品推荐
相关产品推荐

