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
相关产品推荐
相关产品推荐

