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

Python中如何结合map()与字典推导式生成姓名-ID键值字典

问题背景

需要对存储员工信息的字典列表使用map(),仅提取姓名与id字段,最终返回以员工姓名为键、对应员工ID为值的字典。
给定输入数据:

employees = [
   {"id": 12113, "name": "Jim", "department": "Sales"},
   {"id": 12342, "name": "Michael", "department": "Management"},
   {"id": 23312, "name": "Dwight", "department": "Sales"},
]

现有错误代码运行后无法返回预期值,仅输出类似<map object at 0x7f3b0bb6d460>的map对象内存地址,错误代码如下:

def name_id(employees):
   name_and_ids = [{map(('name', 'id'), emp) for emp in employees}]
   print(list(name_id)) ### to see if what I want is being output or not
   return name_and_ids

# 函数调用
print(f"Name and ids: {name_id(employees)}")
错误原因
  • map()的第一个参数必须是可调用的函数对象,原代码传入的('name', 'id')是元组,不符合map()的参数要求。
  • Python 3中map()返回的是惰性迭代器(即map对象),不会直接计算出存储的实际值,直接打印只会输出对象内存地址,必须转换为list、dict等实体数据结构才能拿到内容。
  • 原代码外层用的{...}是集合推导语法,和最终需要的字典返回结构不匹配。
基于map()的正确实现

实现思路:用map()遍历每个员工字典,将单个员工数据转换为(姓名, ID)格式的键值对元组,最后将map返回的迭代器直接传入dict()构造方法,即可生成目标字典。
完整可运行代码:

def name_id(employees):
    # map对每个员工执行提取逻辑,返回的元组迭代器直接转成字典
    name_and_ids = dict(map(lambda emp: (emp["name"], emp["id"]), employees))
    return name_and_ids

# 测试调用
employees = [
   {"id": 12113, "name": "Jim", "department": "Sales"},
   {"id": 12342, "name": "Michael", "department": "Management"},
   {"id": 23312, "name": "Dwight", "department": "Sales"},
]
print(f"Name and ids: {name_id(employees)}")

运行输出结果:

Name and ids: {'Jim': 12113, 'Michael': 12342, 'Dwight': 23312}
代码说明
  • lambda emp: (emp["name"], emp["id"])是匿名处理函数,输入为单个员工字典,输出符合字典构造要求的(键, 值)二元组。
  • map()会把上述处理函数依次作用在员工列表的每一个元素上,返回存储了所有键值对元组的迭代器。
  • 外层的dict()会遍历map迭代器,把每个二元组拼装成最终需要的姓名字典,不需要额外编写循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:57:13