如何在Python字典列表中根据name值获取对应id(优先列表推导式实现)
按列表推导式实现name匹配对应id的方法
核心逻辑很直接:遍历字典列表里的每一个元素,筛选出name字段值和目标值一致的字典,取出对应的id值就行。
基础列表推导式实现
完全贴合需求的写法,逻辑直观好懂:
# 原始数据 l = [ {'id': 1, 'name': 'cream'}, {'id': 2, 'name': 'sugar'}, {'id': 3, 'name': 'mint'} ] # 示例:匹配name为'cream'的对应id target_name = 'cream' # 列表推导式完成筛选 match_result = [item['id'] for item in l if item['name'] == target_name]
运行后match_result的值为[1]。如果确定列表里每个name值都是唯一不重复的,直接取列表第一个元素就能拿到你要的纯数值结果:
matched_id = [item['id'] for item in l if item['name'] == target_name][0] # 传入'cream'得到1,传入'sugar'得到2
更稳妥的适配写法
直接取列表第一个元素的写法有个小问题:如果传入的目标name在列表里没有匹配项,会直接抛出索引越界错误。可以顺着列表推导式的逻辑稍作调整,用生成器搭配next()实现,逻辑完全一致,还能在无匹配时返回自定义默认值,对新手更友好:
# 无匹配时返回None,不会触发报错 matched_id = next((item['id'] for item in l if item['name'] == target_name), None)
高频使用的优化写法
如果后续需要频繁做这类匹配操作,可以用字典推导式提前把原始列表转成“name为键、id为值”的映射结构,之后查找不需要反复遍历列表,效率高很多:
# 仅需转换一次 name_to_id_map = {item['name']: item['id'] for item in l} # 之后查找直接取值即可 print(name_to_id_map['mint']) # 直接输出3
内容的提问来源于stack exchange,提问作者nia4life
相关产品推荐
相关产品推荐

