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

如何按指定列表顺序从字典列表中提取对应类型值?

问题描述

给定以下数据:

atr = [{'name': 'surname', 'type': 'varchar(50)', 'table': None}, {'name': 'ls_data', 'type': 'timestamp', 'table': None}, {'name': 'cpn', 'type': 'int', 'table': None}, {'name': 'code', 'type': 'varchar(200)', 'table': None}]

pk = ['surname', 'cpn', 'ls_data']

需求是从atr列表中提取type值组成新列表,要求新列表元素对应的atr中name与pk列表元素一致,且顺序与pk列表保持一致。

预期输出:

lst = ['varchar(50)', 'int', 'timestamp']

尝试了如下代码,但生成的列表顺序与pk不符:

lst = [d["type"] for d in atr if d["name"] in pk]
解决方案

你原来的列表推导式是按atr的顺序遍历筛选,无法保证和pk的顺序一致。正确的做法是先把atr转换成以name为键、type为值的字典,再按照pk的顺序提取对应类型:

# 将atr转换为name到type的映射字典
name_type_map = {d['name']: d['type'] for d in atr}
# 按pk的顺序提取对应的type值
lst = [name_type_map[name] for name in pk]

运行后就能得到预期输出:['varchar(50)', 'int', 'timestamp']。

这种方式不仅能严格匹配pk的顺序,字典查找的时间复杂度为O(1),整体执行效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:10:58