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

如何用Ipywidgets接收字典参数实现交互式技能筛选?

解决方案

组件组合思路

不用把技能和阈值塞进同一个SelectMultiple组件,拆分后用更直观的组合:

  • 下拉选择器(Dropdown):单独选择某一项技能
  • 整数滑块(IntSlider):设置对应技能的阈值(范围1-5,匹配数据里的技能值区间)
  • 按钮(Button):将当前选择的技能和阈值添加到结果字典
  • 输出框(Output):实时展示已选的阈值组合

完整代码实现

import ipywidgets as widgets
from IPython.display import display

# 定义所有技能列表
skills = ['skill_0', 'skill_1', 'skill_2', 'skill_3', 'skill_4', 'skill_5', 'skill_6', 'skill_7']

# 初始化存储阈值的字典,后续直接用这个字典传参
threshold_dict = {}

# 创建各个组件
skill_dropdown = widgets.Dropdown(
    options=skills,
    value='skill_1',
    description='选择技能:',
    style={'description_width': 'initial'}
)

threshold_slider = widgets.IntSlider(
    min=1,
    max=5,
    value=3,
    description='阈值:',
    style={'description_width': 'initial'}
)

add_btn = widgets.Button(
    description='添加阈值',
    button_style='success'
)

# 用于实时展示已选结果的输出框
display_box = widgets.Output()

# 按钮点击事件处理:更新字典并展示
def on_add_clicked(b):
    selected_skill = skill_dropdown.value
    selected_threshold = threshold_slider.value
    # 覆盖已有技能的阈值,或新增技能阈值
    threshold_dict[selected_skill] = selected_threshold
    # 刷新展示内容
    with display_box:
        display_box.clear_output(wait=True)
        print("当前技能阈值字典:")
        print(threshold_dict)

add_btn.on_click(on_add_clicked)

# 组装组件布局
ui = widgets.VBox([
    widgets.HBox([skill_dropdown, threshold_slider]),
    add_btn,
    display_box
])

# 渲染组件
display(ui)

提取字典与筛选使用

直接拿threshold_dict作为参数传入你的筛选函数即可:

def filter_people(df, thresholds):
    # 生成筛选掩码:所有指定技能都满足 >= 对应阈值
    mask = True
    for skill, threshold in thresholds.items():
        mask &= df[skill] >= threshold
    return df[mask]

# 假设df是你的人员技能DataFrame
filtered_df = filter_people(df, threshold_dict)

方案优势

  • 视觉体验好:没有超长选项列表,每个组件职责清晰
  • 操作简单:选技能、调阈值、点添加,流程直观
  • 安全可靠:不需要解析字符串或用eval,直接维护字典,避免潜在风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:00:23