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

Python Streamlit下拉框返回字符串 如何获取对应字典或列表数据

解决方案

有两种常用实现方式,都可以满足需求:

方式1:直接匹配(适合数据量小的场景)

拿到selectbox返回的选中公司名后,直接遍历BaseObject匹配对应字典即可,代码如下:

import streamlit as st

BaseObject = [{
    'ID': 'zxc123',
    'NAME': 'company1',
    'DESC': 'comp1'
}, {
    'ID': 'zxc222',
    'NAME': 'company2',
    'DESC': 'comp2'
}, {
    'ID': 'zxc345',
    'NAME': 'company3',
    'DESC': 'comp3'
}]

# 生成下拉选项
options = [item['NAME'] for item in BaseObject]
selected_name = st.selectbox('Subdivision:', options)

# 匹配对应完整字典
selected_company = next(item for item in BaseObject if item['NAME'] == selected_name)

# 测试输出
st.write("选中的完整公司数据:", selected_company)
st.write("公司ID:", selected_company['ID'])

说明:

  • 用生成式替代原来的循环生成options,代码更简洁
  • next() 会直接返回第一个匹配到的字典数据,公司名唯一的场景下不会有重复结果

方式2:预构建映射表(适合数据量大的场景)

如果BaseObject数据条目很多,每次选中都遍历会影响性能,可以提前把公司名和对应字典的映射关系存成字典,查询时间复杂度为O(1):

import streamlit as st

BaseObject = [{
    'ID': 'zxc123',
    'NAME': 'company1',
    'DESC': 'comp1'
}, {
    'ID': 'zxc222',
    'NAME': 'company2',
    'DESC': 'comp2'
}, {
    'ID': 'zxc345',
    'NAME': 'company3',
    'DESC': 'comp3'
}]

# 预构建名称到完整数据的映射
name_to_company = {item['NAME']: item for item in BaseObject}
options = list(name_to_company.keys())
selected_name = st.selectbox('Subdivision:', options)

# 直接取对应数据
selected_company = name_to_company[selected_name]

# 测试输出
st.write("选中的完整公司数据:", selected_company)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:27:04