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

如何将SQL表描述返回的特殊格式列表转换为Python字典列表?

SQL查询表结构结果转字典列表实现方案

问题描述

使用SQL查询表结构时,调用的查询函数返回了特殊格式的列表类型结果,需要将其转换为字段字典组成的列表,初步设想通过两层循环实现,需验证思路可行性并获取具体实现代码。

原始输入数据

[
    ['Field', 'Type', 'Null', 'Key', 'Default', 'Extra'],
    (
        ('_id', 'bigint(20) unsigned', 'NO', 'PRI', None, ''), 
        ('_load_dt', 'date', 'NO', '', None, ''), 
        ('_load_dt_time', 'timestamp', 'YES', 'MUL', 'current_timestamp()', ''), 
        ('_data_hash', 'char(160)', 'YES', 'UNI', None, ''), 
        ('_host', 'char(200)', 'YES', '', None, ''), 
        ('_port', 'int(6)', 'YES', '', None, ''), 
        ('_schema', 'char(200)', 'YES', '', None, ''), 
        ('_deleted', 'tinyint(1)', 'YES', '', '0', ''), 
        ('acct_id', 'varchar(200)', 'NO', 'MUL', None, ''), 
        ('account_title', 'varchar(200)', 'NO', 'MUL', None, ''), 
        ('signup_date', 'varchar(200)', 'NO', 'MUL', None, ''), 
        ('admin_email', 'varchar(200)', 'NO', 'MUL', None, '')
    )
]

期望输出格式

由字段字典组成的列表,每个字典以首行的Field/Type/Null/Key/Default/Extra为键,对应每行元组同位置的值为值,格式参考:

[
    {'Field': '_id', 'Type': 'bigint(20) unsigned', 'Null': 'NO', 'Key': 'PRI', 'Default': None, 'Extra': ''},
    {'Field': '_load_dt', 'Type': 'date', 'Null': 'NO', 'Key': '', 'Default': None, 'Extra': ''},
    ...
]

实现方案

你最初设想的两层循环思路完全可行,同时Python提供了更简洁的内置方法快速实现该需求,两种实现方式如下:

简洁实现(推荐)

利用zip配对表头和行数据,直接通过dict()生成单条字段字典,配合列表推导式即可完成核心转换:

# 原始数据
raw_data = [
    ['Field', 'Type', 'Null', 'Key', 'Default', 'Extra'],
    (
        ('_id', 'bigint(20) unsigned', 'NO', 'PRI', None, ''), 
        ('_load_dt', 'date', 'NO', '', None, ''), 
        ('_load_dt_time', 'timestamp', 'YES', 'MUL', 'current_timestamp()', ''), 
        ('_data_hash', 'char(160)', 'YES', 'UNI', None, ''), 
        ('_host', 'char(200)', 'YES', '', None, ''), 
        ('_port', 'int(6)', 'YES', '', None, ''), 
        ('_schema', 'char(200)', 'YES', '', None, ''), 
        ('_deleted', 'tinyint(1)', 'YES', '', '0', ''), 
        ('acct_id', 'varchar(200)', 'NO', 'MUL', None, ''), 
        ('account_title', 'varchar(200)', 'NO', 'MUL', None, ''), 
        ('signup_date', 'varchar(200)', 'NO', 'MUL', None, ''), 
        ('admin_email', 'varchar(200)', 'NO', 'MUL', None, '')
    )
]

# 拆分表头和行数据
headers = raw_data[0]
rows = raw_data[1]

# 核心转换逻辑
result = [dict(zip(headers, row)) for row in rows]

两层循环实现(匹配初始思路)

如果需要显式写循环逻辑,按你最初的两层遍历思路实现即可:

result = []
headers = raw_data[0]
rows = raw_data[1]

# 外层遍历每一行字段数据
for row in rows:
    single_field_dict = {}
    # 内层遍历表头,按索引匹配对应值
    for index, key_name in enumerate(headers):
        single_field_dict[key_name] = row[index]
    result.append(single_field_dict)

两种写法输出结果完全一致,直接运行即可得到符合要求的字典列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:09:20