Используйте список в качестве переменной в цикле for для переключения данных с обратным вызовом в черточке графика

#python-3.x #callback #plotly-dash

Вопрос:

У меня есть словарь, состоящий из двух ключей и списков. Я хотел бы использовать обратный вызов в графическом черточке, чтобы переключить список в качестве переменной для отображения. Список используется в for цикле внутри children html.Div . Пожалуйста, найдите пример ниже :

 import dash
from dash import dcc
from dash import html
from pathlib import Path
from dash.dependencies import Input, Output

app = dash.Dash(__name__)

my_data = {'fruit_list1': ['apple', 'orange', 'peach'], 'fruit_list2': ['cherry', 'grape', 'strawberry']}
my_list = ['fruit_list1', 'fruit_list2']

def fruit_list(fruitlist):
        return(my_data[fruitlist])

def add_value(fruit):
        return html.P('Type of fruit : '   fruit)

app.layout = html.Div(children=[
        html.P('Select fruit list : '),
        dcc.Dropdown(
                id='change-the-list',
                value='fruit_list1',
                clearable=False,
                options=[
                        {'label': value_input, 'value': value_input} for value_input in my_list]
                ),
        html.Div(
                id='fruit-list',
                children=[add_value(fruit) for fruit in fruit_list('fruit_list1')]
                )
        ])

@app.callback(Output('fruit-list', 'children'),
        Input('change-the-list', 'value'))

def update_list(list_input):
        return {
        # What do I do here to switch from 'fruit_list1' to 'fruit_list2'?
        }

if __name__ == '__main__':
        app.run_server(debug=False, host='0.0.0.0', port=8051)
 

В этом случае, как мне динамически переключаться с 'fruit_list1' 'fruit_list2' «на», чтобы отразить изменения с помощью dcc.Dropdown ? Заранее спасибо.

Ответ №1:

Нашел ответ. Мне просто нужно вернуть все целиком children .

 @app.callback(Output('fruit-list', 'children'),
        Input('change-the-list', 'value'))

def update_list(list_input):
        children=[add_value(fruit) for fruit in fruit_list(list_input)]
        return children