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

如何在Streamlit中为会话状态设置嵌套字典结构的值?

Streamlit嵌套字典session_state赋值方案

你当前的input_number函数只能将值存入扁平结构的st.session_state,但需要构建嵌套字典来实现分组汇总(如asset1小计、asset总计)。以下是具体的修改方案:

修改后的input_number函数

import streamlit as st

def input_number(labelnya, session_path, value=None, help=None, format='%g'):
    valuenya = st.number_input(labelnya, value=value, help=help, format=format)
    valuenya = 0 if valuenya is None else valuenya
    
    # 解析嵌套路径,将"asset.asset1.cash_on_hand"拆分为键列表
    keys = session_path.split('.')
    current_dict = st.session_state
    
    # 逐层创建嵌套字典(若不存在则初始化)
    for key in keys[:-1]:
        if key not in current_dict:
            current_dict[key] = {}
        current_dict = current_dict[key]
    
    # 给最终层级的键赋值
    current_dict[keys[-1]] = valuenya
    
    print("All Session:\n{}".format(st.session_state))
    return valuenya

函数调用示例

直接传入用.分隔的嵌套路径作为session_path参数,即可自动生成你需要的嵌套结构:

# 给asset.asset1.cash_on_hand赋值
input_number("Cash on Hand", session_path='asset.asset1.cash_on_hand', value=1)
# 给asset.asset1.account_receivable赋值
input_number("Account Receivable", session_path='asset.asset1.account_receivable', value=2)
# 给liabilities下的字段赋值
input_number("Short-term Loan", session_path='liabilities.liabilities1.short_term_loan', value=5)

执行后,st.session_state会生成目标嵌套结构:

{
    "asset": {
        "asset1": {
            "cash_on_hand": 1,
            "account_receivable": 2
        },
        "asset2": {}
    },
    "liabilities": {
        "liabilities1": {
            "short_term_loan": 5
        },
        "liabilities2": {}
    }
}

分组汇总实现

基于嵌套结构可以轻松完成分组计算:

# 计算asset1的总计
asset1_total = sum(st.session_state['asset']['asset1'].values())
st.write(f"Asset1 Total: {asset1_total}")

# 计算所有资产的总计
asset_total = sum(sum(group.values()) for group in st.session_state['asset'].values())
st.write(f"Total Assets: {asset_total}")

# 计算所有负债的总计
liabilities_total = sum(sum(group.values()) for group in st.session_state['liabilities'].values())
st.write(f"Total Liabilities: {liabilities_total}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:45:23