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

Python字典键值替换:将d2元素替换为d1对应值

线性复杂度实现字典列表元素的映射替换

需求说明

现有两个Python字典d1和d2:

d1={569328: float('inf'),
 574660: float('inf'),
 1187498: 1,
 1226468: 2,
 1236571: float('inf'),
 1239098: 1,
 1239277: 5,
 1239483: float('inf'),
 1239622: 9,
 1239624: float('inf'),
 1239749: float('inf'),
 1334477: 6,
 1340405: float('inf'),
 1340418: float('inf'),
 1340462: 2,
 1340471: float('inf')}
d2={596005: [569328],
 4321416: [1334477, 1187498],
 5802640: [569328, 1226468],
 6031690: [569328,
  1340462,
  1239622,
  1187498,
  1239277]}

需要将d2中每个列表里的元素,替换为d1中对应键的值,最终得到目标字典d3:

d3={596005: [float('inf')],
 4321416: [6, 1],
 5802640: [float('inf'), 2],
 6031690: [float('inf'),
  2,
  9,
  1,
  5]}

要求方案为线性复杂度,且代码简洁。

解决方案

直接用字典推导式嵌套列表推导式即可,这是最简洁且符合线性复杂度要求的实现:

d3 = {key: [d1[item] for item in value_list] for key, value_list in d2.items()}

补充说明

  1. 复杂度分析:遍历d2的每个键值对是O(M)(M为d2的键数量),再遍历每个列表内的元素是O(K)(K为所有列表元素的总个数),整体时间复杂度为O(M+K),属于线性复杂度,完全适配大数据量场景。
  2. 异常处理:如果d2的列表中存在d1里没有的键,直接用d1[item]会抛出KeyError。这种情况可以改用d1.get(item, 默认值)避免报错,示例如下:
    # 示例:默认值设为None
    d3 = {key: [d1.get(item, None) for item in value_list] for key, value_list in d2.items()}
    
  3. 代码中的float('inf')是Python表示无穷大的标准写法,和原示例中的inf等价(原示例大概率提前导入了from math import inf,两种写法均可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:11:54