如何使用Python字典构造设施选址问题所需的距离矩阵
需求实现说明
你的需求完全可以实现,Python字典支持字符串类型的键,你要求的行首元素+表头字段的拼接格式完全符合键的使用规则。
基础实现方案(无第三方依赖)
你只需要先整理好两类基础数据:
- 表头字段列表:所有SP_开头的站点名称
- 行数据列表:每一组第一个元素为地点名,后续元素为对应表头的距离值
示例代码如下:
# 示例基础数据,实际使用时替换为你自己的真实数据 headers = ["SP_Andrimont", "SP_Pepinster", "SP_Other"] rows = [ ["Spa", 12275, 10626.81, 8900], ["OtherLoc", 13400, 9870, 7650.2] ] distance_dict = {} for row in rows: loc_name = row[0] # 遍历表头和对应距离 for idx, sp_name in enumerate(headers): # 拼接生成键 key = loc_name + sp_name # 存入距离值,row[0]是地点名,所以距离从索引1开始取 distance_dict[key] = row[idx + 1] # 调用测试 print(distance_dict["SpaSP_Andrimont"]) # 输出 12275 print(distance_dict["SpaSP_Pepinster"]) # 输出 10626.81
简化实现方案(适合从文件读取原始矩阵)
如果你的距离矩阵是存储在csv/Excel文件中,可以用pandas库快速处理,代码更简洁:
import pandas as pd # 读取csv文件,index_col=0指定第一列为行索引(即你的地点名) df = pd.read_csv("你的距离矩阵文件路径.csv", index_col=0) distance_dict = {} for loc_name, row_data in df.iterrows(): for sp_name, distance in row_data.items(): distance_dict[loc_name + sp_name] = distance
可选替代方案
如果担心字符串拼接可能出现极端重名情况,可以用元组作为字典的键,可读性和唯一性更好:
# 生成键的部分改为元组 key = (loc_name, sp_name) # 调用时格式如下 print(distance_dict[("Spa", "SP_Andrimont")])
内容的提问来源于stack exchange,提问作者mbk_wass
相关产品推荐
相关产品推荐

