提问人:Daylyn Mosher 提问时间:4/13/2023 更新时间:4/13/2023 访问量:28
如何创建仅在进行上一个选择后才出现的下拉列表,并使用以 / 分隔的数据?
How to create dropdowns that only appear after the previous selection has been made and using data that is separated by /?
问:
我想使用 python 小部件创建根据上一个选择进行更新的下拉菜单,其中下一个下拉列表在选择上一个下拉列表之前不会出现,并且下拉列表的数量不会硬编码到代码中。
例如:
示例 1: 第一个下拉列表选择: A类 B类 下一个基于类别 A 选择的下拉列表选择: 类别 A1 类别 A2 如果选择了 A1,则下一个下拉列表选择: 类别 A1.1 类别 A1.2
示例 2: 第一个下拉列表选择: A类 B类 下一个基于类别 B 选择的下拉列表选择: 类别 B1 类别 B2 如果选择了 B2,则下一个下拉列表选择: 类别 B2.1 类别 B2.2 如果选择了 B2.1,则下拉列表选择: B2.1.1
示例 3: 第一个下拉列表选择: A类 B类 下一个基于类别 B 选择的下拉列表选择: 类别 B1 类别 B2 如果选择了 B2,则下一个下拉列表选择: 类别 B2.1 类别 B2.2 如果选择了 B2.2,则选择下一个下拉列表: B2.2.1 如果选择了 B2.2.1,则下拉列表选择: B2.2.1.1
我尝试了以下操作,但它没有正确填充。
import ipywidgets as widgets
data = {'product_id': ['p1', 'p2', 'p3', 'p4', 'p5', 'p6'],
'categories': ['Category A/Category A1/Category A1.1',
'Category A/Category A1/Category A1.2',
'Category A/Category A2/Category A2.1',
'Category B/Category B1/Category B1.1/Category B1.1.1',
'Category B/Category B2/Category B2.1/Category B2.1.1',
'Category B/Category B2/Category B2.2/Category B2.2.1/Category B2.2.1.1']}
# Extract all categories from data
categories = set()
for category_path in data['categories']:
categories.update(category_path.split('/'))
# Create a dictionary that maps each category to its parent
parent_dict = {}
for category in categories:
parent_dict[category] = '/'.join(category.split('/')[:-1])
# Create dropdown menus
dropdowns = []
prev_dropdown = None
for category in sorted(categories):
options = [''] + [c for c in categories if parent_dict[c] == category]
dropdown = widgets.Dropdown(options=options)
if prev_dropdown is not None:
def observe_dropdown(change, prev_dropdown=prev_dropdown, dropdown=dropdown):
prev_value = prev_dropdown.value
if prev_value != '':
dropdown.options = [''] + [c.split('/')[-1] for c in data['categories'] if c.startswith(prev_value+'/'+change.new+'/')]
else:
dropdown.options = ['']
dropdown.value = ''
prev_dropdown.observe(observe_dropdown, 'value')
prev_dropdown = dropdown
dropdowns.append(dropdown)
# Display dropdown menus
widgets.VBox(dropdowns)
答: 暂无答案
下一个:独立性示例的类型
评论