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.

Ordenar los valores del diccionario según los valores de una de las claves ckeys.

Recibo un diccionario con dos claves, que tienen listas de listas como valores.

Ejemplo:

dict = {'points' : [[2,1],[3,4], [5,6],[7,8]], 'ids':[[2], [1], [3], [0]]}

Cada punto tiene un ID asociado, por ejemplo: el punto [2,1] tiene el ID [2], el punto [3,4] tiene el ID [1], etc.

Necesito ordenar los puntos en relación a cada ID. Entonces, la salida que necesito es algo como esto:

dict = {'points' : [[7,8],[3,4], [2,1],[5,6]], 'ids':[[0], [1], [2], [3]]}

¿Cómo puedo hacer esto?

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para ordenar los puntos en función de cada id, podemos crear una lista de tuplas donde cada tupla contiene el id y el punto correspondiente. Luego, podemos ordenar esta lista según el id utilizando la función sorted(). Finalmente, podemos extraer los puntos y los ids ordenados de la lista ordenada de tuplas y actualizar el diccionario. Aquí está el código para hacer esto:

    # diccionario de entrada
    my_dict = {'points': [[2,1],[3,4], [5,6],[7,8]], 'ids':[[2], [1], [3], [0]]}
    
    # crear una lista de tuplas con id y punto
    my_list = [(my_dict['ids'][i][0], my_dict['points'][i]) for i in range(len(my_dict['points']))]
    
    # ordenar la lista según el id
    sorted_list = sorted(my_list, key=lambda x: x[0])
    
    # extraer los puntos y los ids ordenados de la lista ordenada
    sorted_points = [t[1] for t in sorted_list]
    sorted_ids = [[t[0]] for t in sorted_list]
    
    # actualizar el diccionario
    my_dict['points'] = sorted_points
    my_dict['ids'] = sorted_ids
    
    # imprimir el diccionario actualizado
    print(my_dict)
    

    Esto producirá la siguiente salida:

    {'points': [[7, 8], [3, 4], [2, 1], [5, 6]], 'ids': [[0], [1], [2], [3]]}
    

Comments are closed.