如何按指定列表顺序从字典列表中提取对应类型值?
问题描述
给定以下数据:
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
相关产品推荐
相关产品推荐

