Updating many dropdowns with just one callback

Let’s say we have three dropdowns where the values of each one are conditioned by the values of the others.

The following code brings an implementation with three callbacks.

My question is - can I solve this with just one callback?

import plotly.express as px
from dash import Dash, Input, Output, dcc, html

df = px.data.election()
df.set_index("district_id", inplace=True)

drop_district = dcc.Dropdown(
    id="dropdown-district",
    options=[{"label": vl, "value": vl} for vl in df.district.unique()],
    placeholder="District",
    multi=True,
)

drop_winner = dcc.Dropdown(
    id="dropdown-winner",
    options=[{"label": vl, "value": vl} for vl in df.winner.unique()],
    placeholder="Winner",
    multi=True,
)

drop_result = dcc.Dropdown(
    id="dropdown-result",
    options=[{"label": vl, "value": vl} for vl in df.result.unique()],
    placeholder="Result",
    multi=True,
)

app = Dash(__name__)
app.layout = html.Div(
    [
        html.Div(drop_district, style={"margin": "50px"}),
        html.Div(drop_winner, style={"margin": "50px"}),
        html.Div(drop_result, style={"margin": "50px"})
    ]
)


@app.callback(
    output=dict(x=Output("dropdown-district", "options")),
    inputs=dict(
            a=Input("dropdown-winner", "value"),
            b=Input("dropdown-result", "value")
    )
)
def call_one(a, b):
    input_dict = {"winner": a, "result": b}
    output = output_values(input_dict, "district")
    drop = [{'label': i, 'value': i} for i in output]
    return dict(x=drop)


@app.callback(
    output=dict(x=Output("dropdown-winner", "options")),
    inputs=dict(
            a=Input("dropdown-district", "value"),
            b=Input("dropdown-result", "value")
    )
)
def call_two(a, b):
    input_dict = {"district": a, "result": b}
    output = output_values(input_dict, "winner")
    drop = [{'label': i, 'value': i} for i in output]
    return dict(x=drop)


@app.callback(
    output=dict(x=Output("dropdown-result", "options")),
    inputs=dict(
            a=Input("dropdown-winner", "value"),
            b=Input("dropdown-district", "value")
    )
)
def call_three(a, b):
    input_dict = {"winner": a, "district": b}
    output = output_values(input_dict, "result")
    drop = [{'label': i, 'value': i} for i in output]
    return dict(x=drop)


def output_values(input_dict, col_val_output):
    query_list = list()
    for k, v in input_dict.items():
        if v is not None and v != []:
            if len(v) == 1:
                v = list(v)
            query_list.append(f"{k} == {v}")
    try:
        query = ' & '.join(query_list)
        result = df.query(query)
    except ValueError:
        result = df
    output = result[col_val_output].unique().tolist()
    return output


if __name__ == "__main__":
    app.run_server(debug=True)

ps. Sorry if I’m asking a repeated or recurring question here