You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用列表与pandas DataFrame创建符合指定映射规则的字典?

高效实现方案

针对大数据量的场景,推荐优先使用pandas原生向量化操作,避免Python层面的循环,核心实现逻辑如下:

  • 首先将DataFrame的init、term两列设为复合索引,直接提取cost列转为字典,这一步所有操作均在pandas底层C语言层面执行,性能极高
  • 再根据给定的link列表过滤字典,只保留需要的键值对

完整代码示例

import pandas as pd

# 示例数据
data = {'init':[1,2,1], 'term':[2,3,3], 'cost':[10,20,30]}
df = pd.DataFrame.from_dict(data)
link = [(1,2),(1,3),(2,3)]

# 生成全量的(init, term): cost 字典
full_cost_map = df.set_index(['init', 'term'])['cost'].to_dict()
# 按link列表过滤,得到目标字典
link_cost = {k: full_cost_map[k] for k in link}

运行后得到的link_cost正好符合要求的格式:{(1, 2): 10, (1, 3): 30, (2, 3): 20}

异常兼容处理

如果你的link列表中存在部分元组不在DataFrame的init+term组合里,可以用dict.get()方法设置默认值,避免抛出KeyError:

# 不存在的元组默认赋值为0,可根据需求修改默认值
link_cost = {k: full_cost_map.get(k, 0) for k in link}

性能说明

该方案的性能远高于逐行遍历DataFrame的实现:

  • 当DataFrame数据量达到百万级时,set_index+to_dict的组合操作耗时仅为iterrows遍历的1/100甚至更低
  • 后续的字典推导式仅和link列表的长度相关,几乎不会产生额外性能开销

内容的提问来源于stack exchange,提问作者mars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:09:00