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

如何基于数据库查询数据创建Python多值键字典用于UI展示

整理问题与选项数据的实现方案

一、生成目标字典的实现代码

要得到以问题文本为键、选项数组为值的字典,推荐先通过question_id做中间映射(避免因问题文本重复导致数据覆盖),再生成目标结构,代码如下:

# 数据库查询返回的问题数据
questions = [
    {'question_id': 1, 'question_text': 'How many servers run at max capacity?', 'category_id': 1, 'is_long_survey': 0},
    {'question_id': 2, 'question_text': 'Is the database getting replicated?', 'category_id': 1, 'is_long_survey': 0},
    {'question_id': 3, 'question_text': 'Where is the infrastructure located?', 'category_id': 1, 'is_long_survey': 0}
]

# 数据库查询返回的选项数据
choices = [
    {'choice_id': 1, 'choice_text': '2', 'question_id': 1},
    {'choice_id': 2, 'choice_text': '4', 'question_id': 1},
    {'choice_id': 3, 'choice_text': '6', 'question_id': 1},
    {'choice_id': 4, 'choice_text': 'Yes', 'question_id': 2},
    {'choice_id': 5, 'choice_text': 'No', 'question_id': 2},
    {'choice_id': 6, 'choice_text': 'global', 'question_id': 3},
    {'choice_id': 7, 'choice_text': 'local', 'question_id': 3}
]

# 1. 按question_id分组选项,避免重复遍历
choices_by_qid = {}
for choice in choices:
    qid = choice['question_id']
    if qid not in choices_by_qid:
        choices_by_qid[qid] = []
    choices_by_qid[qid].append(choice['choice_text'])

# 2. 生成以问题文本为键的字典
question_choices_dict = {}
for q in questions:
    question_choices_dict[q['question_text']] = choices_by_qid.get(q['question_id'], [])

# 输出结果
print(question_choices_dict)

运行后会得到如下结构:

{
    'How many servers run at max capacity?': ['2', '4', '6'],
    'Is the database getting replicated?': ['Yes', 'No'],
    'Where is the infrastructure located?': ['global', 'local']
}

二、更适合UI展示的其他数据结构

如果需要在HTML中展示更多问题属性(比如分类ID、是否为长问卷),推荐使用嵌套字典的列表,每个元素包含完整的问题信息和对应选项,更便于模板遍历:

questions_with_choices = []
for q in questions:
    # 复制原问题的所有属性
    q_item = q.copy()
    # 添加对应选项列表
    q_item['choices'] = choices_by_qid.get(q['question_id'], [])
    questions_with_choices.append(q_item)

生成的结构示例:

[
    {
        'question_id': 1,
        'question_text': 'How many servers run at max capacity?',
        'category_id': 1,
        'is_long_survey': 0,
        'choices': ['2', '4', '6']
    },
    # ... 其他问题对象
]

另外,也可以用collections.defaultdict简化选项分组的代码,减少手动判断键是否存在的步骤:

from collections import defaultdict

choices_by_qid = defaultdict(list)
for choice in choices:
    choices_by_qid[choice['question_id']].append(choice['choice_text'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:55:22