Динамическая установка значения dcc.dropdown в Plotly Dash

Я динамически создаю график Dash 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 и вставляет «Все» в список параметров. Теперь я хочу установить значение (по умолчанию) на «Все», если оно существует, или на элемент [0] в списке пар K / V.

    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 для определенного элемента в списке параметров пар ключ-значение по индексу?


person Glen    schedule 14.05.2018    source источник


Ответы (2)


Вы должны определить 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 - использовать обратные вызовы.

Просто сначала определите массив.

person Michael Colon    schedule 24.05.2018

вы также можете добиться этого, не создавая функции. Я буду использовать ваш 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)
  ]
)

см. мои собственные результаты ниже: «ВСЕ РЕГИОНЫ» не были в моем фрейме данных. введите здесь описание изображения

person Jallow    schedule 31.08.2020