如何使用 Jupyter Widgets 创建依赖下拉列表以从 dict 获取数据?
How to create dependent dropdowns using Jupyter Widgets to get data from dict?
我正在尝试使用 Jupyter Dropdowns 为两个变量分配值,其中第一个下拉列表是一个数据中心,第二个是该数据中心内可用的站点,以便我可以在代码中进一步使用这些变量。
我尝试了不同文章中的多个示例,但找不到我缺少的内容。
我有以下字典:
data_center_environments = {
'US': {
'data_center': 'us..com',
'api_keys': {
'sandbox' : '3_EV',
'dev_parent' : '3_hK',
'stage' :'3_GE',
'prod' : '3_NL',
}
},
'RU': {
'data_center': 'ru..com',
'api_keys': {
'stage_parent' : '3_sN',
'prod_parent' : '3_R9',
}
},
'CN': {
'data_center': 'cn..cn',
'api_keys': {
'stage_parent' : '3_3k',
'prod_parent' : '3_MH',
}
},
'EU': {
'data_center': 'eu..com',
'api_keys': {
'sandbox' : '3_7h',
}
},
}
我创建了两个函数来获取数据中心和站点:
def get_dc(dc_select=None):
dc = data_center_environments.get(dc_select)['data_center']
return dc
def get_site_api_key(dc_select=None, site_select=None):
site_api_key = data_center_environments[dc_select]['api_keys'][site_select]
return site_api_key
这里我描述两个下拉菜单:
dc_s = widgets.Dropdown(
options = data_center_environments.keys(),
description = 'Data Center:',
disabled = False,
)
site_s = widgets.Dropdown(
options=list(data_center_environments[dc_s.value]['api_keys']),
description = 'API Key:',
disabled = False,
)
def on_value_change(change):
dc = change.new
site_s.options = data_center_environments[dc_s.value]['api_keys']
dc_s.observe(on_value_change, 'value')
这是我在 Jupyter Notebook 页面上调用它们的方式:
domain = interactive(get_dc, dc_select = dc_s)
site = interactive(get_site_api_key, dc_select = dc_s, site_select = site_s)
display(domain)
display(site)
问题:
0. 我有 3 个下拉菜单而不是两个
1. 更改数据中心值时出现异常
2. 当我尝试打印 "domain"、"domain.value" 时,我得到 "None" 作为输出
我想要达到的目标:
在:
域名=
网站=
打印(域,站点)
输出:
Select 数据中心 [下拉:'US'、'CN'、'RU' 等] -> 选择 'US'
Select 站点 [下拉列表 'US':'prod'、'stage'、'dev_parent'、'sandbox'] -> select 'prod'
'us..com' , '3_NL'
我做错了什么?如何更改我的代码以使其工作?
谢谢!
我最终编写了一个 returns 字典的函数,我只是从中获取值。
下面的代码是 Widgets Guide 中的教科书示例。
解决方案:
dc = 'US'
domain = widgets.Dropdown(
options = list(data_center_environments),
description = 'Data Center:',
disabled = False,
)
site = widgets.Dropdown(
options=list(data_center_environments[dc]['api_keys']),
description = 'API Key:',
disabled = False,
)
def on_value_change(change):
dc = change.new
site.options = data_center_environments[dc]['api_keys']
domain.observe(on_value_change, 'value')
def creds(data_center, api_key, use_secret):
data_center = data_center_environments[domain.value]['data_center']
api_key = site.value
creds = dict()
creds['data_center'] = data_center
creds['api_key'] = api_key
return creds
我正在尝试使用 Jupyter Dropdowns 为两个变量分配值,其中第一个下拉列表是一个数据中心,第二个是该数据中心内可用的站点,以便我可以在代码中进一步使用这些变量。
我尝试了不同文章中的多个示例,但找不到我缺少的内容。
我有以下字典:
data_center_environments = {
'US': {
'data_center': 'us..com',
'api_keys': {
'sandbox' : '3_EV',
'dev_parent' : '3_hK',
'stage' :'3_GE',
'prod' : '3_NL',
}
},
'RU': {
'data_center': 'ru..com',
'api_keys': {
'stage_parent' : '3_sN',
'prod_parent' : '3_R9',
}
},
'CN': {
'data_center': 'cn..cn',
'api_keys': {
'stage_parent' : '3_3k',
'prod_parent' : '3_MH',
}
},
'EU': {
'data_center': 'eu..com',
'api_keys': {
'sandbox' : '3_7h',
}
},
}
我创建了两个函数来获取数据中心和站点:
def get_dc(dc_select=None):
dc = data_center_environments.get(dc_select)['data_center']
return dc
def get_site_api_key(dc_select=None, site_select=None):
site_api_key = data_center_environments[dc_select]['api_keys'][site_select]
return site_api_key
这里我描述两个下拉菜单:
dc_s = widgets.Dropdown(
options = data_center_environments.keys(),
description = 'Data Center:',
disabled = False,
)
site_s = widgets.Dropdown(
options=list(data_center_environments[dc_s.value]['api_keys']),
description = 'API Key:',
disabled = False,
)
def on_value_change(change):
dc = change.new
site_s.options = data_center_environments[dc_s.value]['api_keys']
dc_s.observe(on_value_change, 'value')
这是我在 Jupyter Notebook 页面上调用它们的方式:
domain = interactive(get_dc, dc_select = dc_s)
site = interactive(get_site_api_key, dc_select = dc_s, site_select = site_s)
display(domain)
display(site)
问题: 0. 我有 3 个下拉菜单而不是两个 1. 更改数据中心值时出现异常 2. 当我尝试打印 "domain"、"domain.value" 时,我得到 "None" 作为输出
我想要达到的目标: 在: 域名= 网站= 打印(域,站点)
输出: Select 数据中心 [下拉:'US'、'CN'、'RU' 等] -> 选择 'US' Select 站点 [下拉列表 'US':'prod'、'stage'、'dev_parent'、'sandbox'] -> select 'prod'
'us..com' , '3_NL'
我做错了什么?如何更改我的代码以使其工作? 谢谢!
我最终编写了一个 returns 字典的函数,我只是从中获取值。 下面的代码是 Widgets Guide 中的教科书示例。
解决方案:
dc = 'US'
domain = widgets.Dropdown(
options = list(data_center_environments),
description = 'Data Center:',
disabled = False,
)
site = widgets.Dropdown(
options=list(data_center_environments[dc]['api_keys']),
description = 'API Key:',
disabled = False,
)
def on_value_change(change):
dc = change.new
site.options = data_center_environments[dc]['api_keys']
domain.observe(on_value_change, 'value')
def creds(data_center, api_key, use_secret):
data_center = data_center_environments[domain.value]['data_center']
api_key = site.value
creds = dict()
creds['data_center'] = data_center
creds['api_key'] = api_key
return creds