7

我正在使用以下方法动态构建一个情节破折号dcc.dropdown列表:

def BuildOptions(DataFrameSeries, AddAll):  
    OptionList = [{'label': i, 'value': i} for i in DataFrameSeries.unique()]
    if AddAll == 1:       
        OptionList.insert(0,{'label': 'All', 'value': 'All'})          
    return OptionList

它使用df系列中的唯一值,并将“全部”插入选项列表。我现在想将(默认)值设置为“全部”(如果存在)或 K/V 对列表中的 [0] 项。

    html.Div([
            dcc.Dropdown(
                id='Prov_DD',                    
                options=BuildOptions(data.TASKPROVINCE,1),
               # value=data.TASKPROVINCE[0],
               # value=dcc.Dropdown.value[0],
                 value='All'  # this works for those list that have 'All' 
                              # but I want [0] item   
                multi=True
            )],className='two columns'
            ),

有什么方法可以dcc按索引将下拉菜单设置为键值对选项列表中的某个项目?

4

2 回答 2

7

您应该定义一个 options_array。然后使用该数组填充下拉选项和值参数。定义数组后,您可以通过索引从预定义数组 (options_array) 中选择默认值。

options_array = BuildOptions(data.TASKPROVINCE,1)
html.Div([
    dcc.Dropdown(
    id='Prov_DD',                    
    options=options_array,
    value=options_array[0],
    multi=True)
  ],
  className='two columns'
),

您将无法从 dcc.Dropdown(options=...) 中获取值,因为它实际上还没有被实例化。

另外,此时我认为实用更新 dcc.Dropdown 的唯一其他方法是使用回调。

只需先定义数组。

于 2018-05-24T04:13:02.653 回答
0

您也可以在不创建函数的情况下实现此目的。我将以你的 for 为例向你展示它是如何为我工作的。

    OptionList = [{'label': i, 'value': i} for i in DataFrameSeries.unique()]
    OptionList.insert(0,{'label': 'All', 'value': 'All'}

然后在你的下拉组件中,这样说options = optionList

html.Div([
    dcc.Dropdown(
    id='all',                    
    options=optionList,
    value=optionList[0],
    multi=True)
  ]
)

在下面查看我自己的结果:“所有地区”不在我的数据框中。 在此处输入图像描述

于 2020-08-31T08:27:15.080 回答