Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Ordenar datos en treeview.
#1
Photo 
Buenos días, querida comunidad. Les traigo un inconveniente que, quizás, sea de fácil resolución y todo ocurra porque yo estoy bloqueado.
Tengo una función de consulta a la bbdd que finaliza así:
Código:
            for fila in cursor:

                day=fila[2].split("/")
                day2=day[2]
                tree_cumples.insert("", "end", text=fila[0], values=(fila[1], day2))

Y genera el tree de la imagen que adjunto.

Lo que necesitaría hacer es ordenar el tree por la útima columna (día).

El problema que se me presenta es que la columna "día" del tree, se toma de "day2" que es una variable creada luego de un split a "fila[2]" (que es uno de los resultado de la búsqueda y se compone de año/mes/día), por lo cual, no puedo hacer un "order by" en la sentencia sql (porque me ordenaría primero según el año, luego según el mes, pero sólo lo necesito según el día). Y no encontré (luego de darle mil vueltas) la manera de hacer un "sort" tal y como está planteado el ciclo for.

Entonces... ¿hay manera de hacer que el tree ordene los datos presentados de acuerdo a determinada columna (que en este caso sería "día")?
O, ¿está mal planteado el ciclo for y debería hacerlo de otra manera?
O, ¿existe sentencia sql que me permita disgregar un dato compuesto?

De antemano, y como siempre, gracias.


Archivos adjuntos Miniatura(s)
   
Responder
#2
Buenas. No sé en SQL, pero en Python podés ordenarlo por día así:

Código:
datos = [
    ("Juan", "Perez", "2023/10/08"),
    ("John", "Doe", "2023/10/05"),
    ("Matias", "Gonzalez", "2023/10/10")
]
datos_ordenados = sorted(datos, key=lambda fila: int(fila[2].split("/")[2]))
print(datos_ordenados)

Más sobre sorted() acá: http://preview.micro.recursospython.com/...tupla.html.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
Excelente, Francisco. Finalmente sí había un sorted que aplicar.

Tengo una pregunta:
1) Esta línea "datos_ordenados = sorted(datos, key=lambda fila: int(fila[2].split("/")[2]))" ¿corresponde a lo que se conoce como "comprensión de listas"?
De ser así, ¿cómo sería si no aplicara la comprensión?

Gracias.
Responder
#4
Hola, Diego.

No es comprensión de listas. Es programación funcional, usando la función incorporada sorted() y una función lambda. Te dejo a mano todos los links para que te puedas interiorizar.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)