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

使用map()处理字典生成新字典报错,求正确实现方案

使用map()实现字典值批量计算的正确方法

问题背景

现有字典:

prices = {'n': 99, 'a': 99, 'c': 147}

自定义折扣计算函数:

def formula(value):
    value = value - value * 0.05
    return value

需要生成目标字典:

new_prices = {'n': 94.05, 'a': 94.05, 'c': 139.65}

错误原因

执行以下代码时触发TypeError:

new_prices = dict(map(formula, prices.values()))

错误信息:

TypeError: cannot convert dictionary update sequence element #0 to a sequence

核心问题是dict()构造函数要求传入键值对组成的序列(比如(key, value)格式的元组迭代器),但上述代码仅传入了处理后的数值序列,既丢失了原字典的键,也不符合dict()的参数要求。

正确实现

要保留原字典的键,需遍历字典的items()(键值对集合),通过map()同时处理键和值:

prices = {'n': 99, 'a': 99, 'c': 147}

def formula(value):
    value = value - value * 0.05
    return value

# 正确用法:用lambda将键值对映射为(原键, 处理后的值)
new_prices = dict(map(lambda item: (item[0], formula(item[1])), prices.items()))
print(new_prices)
# 输出: {'n': 94.05, 'a': 94.05, 'c': 139.65}

原理说明

  • prices.items()返回原字典的键值对迭代器,每个元素是(key, value)元组
  • map()配合lambda,对每个键值对执行:保留原键,将值传入formula()完成计算
  • 最终map()返回的是(key, 计算后的值)元组的迭代器,完全符合dict()构造函数的参数要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:40:42