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

Python如何在单行字典推导式中高效转换键为int类型

问题背景
  • 现有两个字典,其中dict_a_to_c数据量极大:
dict_a_to_c = {'803': 2, '808': 8, '30': 9, '37': 11, '38': 12, '39': 13, '481': 18, '816': 21, .....}
# length of dict_a_to_c is huge.
 
dict_a_to_b = {480:2, 37:5, 40: 9, 816:20, 148: 18}
  • 原有实现逻辑为先全量转换dict_a_to_c的键为int类型,再通过字典推导式生成映射结果dict_c_to_b,代码如下:
# converting key of dict_a_to_c to int
dict_a_to_c = {int(key):value for key, value in dict_a_to_c.items()}

dict_c_to_b = {dict_a_to_c[k]: dict_a_to_b[int(k)] for k in dict_a_to_b if k in dict_a_to_c}
  • 上述代码运行后dict_c_to_b的输出为{11: 5, 21: 20}
  • 现存问题:dict_a_to_c数据量过大,全量转换其所有键的类型性能损耗过高,需要在构建dict_c_to_b的逻辑中直接完成必要的键类型转换,高效实现映射需求。
高效实现方案

核心思路是完全避免全量遍历大字典做类型转换,只遍历数据量更小的dict_a_to_b,仅对当前参与匹配的键做类型转换,把时间开销从和大字典规模绑定,降到和小字典规模绑定。
单行字典推导式实现如下:

dict_c_to_b = {dict_a_to_c[str(k)]: v for k, v in dict_a_to_b.items() if str(k) in dict_a_to_c}

性能优势说明

  • 不需要修改原始大字典dict_a_to_c的任何内容,省去了全量遍历大字典做键类型转换的O(n)开销
  • 循环遍历的对象是键数更少的dict_a_to_b,循环次数和小字典长度一致,不受大字典规模影响
  • 仅对当前遍历到的小字典键做1次str()转换,用来匹配大字典的字符串键,类型转换的次数等于小字典的键数,远小于全量转换大字典键的转换次数
  • 字典的键存在判断、取值都是O(1)操作,整体逻辑没有额外性能损耗,运行结果和原有方案完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:54:18