es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Desplegable de ipywidget ‘nuevo’ contiene varios objetos.

Estoy creando algunos gráficos interactivos y estoy intentando construir uno con un segundo menú desplegable dinámico basado en el primero.

def update_dropdown(change):
    global lista_paises
    global lista_paises2
    global drop2
    print(change.new)
    ##lista_paises2 = lista_paises.remove(change.new) <- No funciona debido a múltiples valores
    ##drop2.options = lista_paises2

lista_paises2 = lista_paises
drop1 = widgets.Dropdown(options=lista_paises, value='Estados Unidos', description='País:')
drop2 = widgets.Dropdown(options=lista_paises2, value='China', description='País:')
drop1.observe(update_dropdown)
interactive(compare_country_graph, Country1=drop1, Country2=drop2, Column=widgets.Dropdown(options=lista_columnas, value='PIB', description='Indicador:'))

El problema es que change.new está devolviendo múltiples valores y no importa cómo lo intente, no puedo obtener solo un valor. He intentado utilizar listas, diccionarios, series y matrices sin éxito.

Más código que he intentado:

def update_dropdown(change):
    global lista_paises
    global lista_paises2
    global drop2
    global y
    global nueva_palabra
    y = []
    for letra in str(change.new):
        if letra.isalpha():
            y.append(letra)

nueva_palabra = ""
for x in y:
    nueva_palabra += x 

print(nueva_palabra)

¿Alguien sabe cómo puedo acceder y obtener SOLAMENTE el nombre del país de este menú desplegable?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es utilizar el método str.split() para dividir la cadena por espacios en blanco y tomar el último elemento como el nombre del país. Aquí hay una versión actualizada del código:

    def update_dropdown(change):
        global country_list
        global country_list2
        global drop2
        print(change.new)
        country_name = str(change.new).split(" ")[-1]
        country_list2 = [c for c in country_list if c != country_name]
        drop2.options = country_list2
    
    country_list2 = country_list
    drop1 = widgets.Dropdown(options=country_list, value='United States', description='País:')
    drop2 = widgets.Dropdown(options=country_list2, value='China', description='País:')
    drop1.observe(update_dropdown)
    interactive(compare_country_graph, Country1=drop1, Country2=drop2, Column=widgets.Dropdown(options=column_list, value='GDP', description='Métrica:'))
    

    En esta versión actualizada, el nombre del país se extrae de la cadena change.new utilizando el método str.split() y se almacena en la variable country_name. Luego, se crea una nueva lista country_list2 filtrando el nombre del país de la lista original country_list. Finalmente, se actualiza drop2.options con la lista actualizada country_list2.

Comments are closed.