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.

Itera de una clave a otra en un OrderedDict.

Tengo un OrderedDict y tengo dos claves. Sé que una clave se encuentra almacenada antes que la otra clave y me gustaría iterar todos los elementos entre la primera clave y la segunda clave.

No quiero iterar sobre todo el mapa, porque es enorme. Solo quiero los elementos entre las dos claves que tengo. ¿Cómo puedo hacer esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto es mediante el uso de las funciones itertools.dropwhile() e itertools.takewhile() junto con el método OrderedDict.items().

    Así es como puedes hacerlo:

    1. Encuentra el índice de la primera y segunda clave utilizando el método OrderedDict.keys().
    my_dict = OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
    
    first_key = 'b'
    second_key = 'd'
    
    keys = list(my_dict.keys()) # obtener una lista de todas las claves
    start_idx = keys.index(first_key) # encontrar el índice de la primera clave
    end_idx = keys.index(second_key) # encontrar el índice de la segunda clave
    
    1. Utiliza la función itertools.dropwhile() para saltar todos los elementos antes de la primera clave.
    from itertools import dropwhile
    
    # crea una función lambda que devuelve True hasta que se encuentre la primera clave
    skip_func = lambda x: x[0] != first_key
    
    # utilizar dropwhile para saltar todos los elementos antes de la primera clave
    items = dropwhile(skip_func, my_dict.items())
    
    1. Utiliza la función itertools.takewhile() para tomar todos los elementos hasta que se encuentre la segunda clave.
    from itertools import takewhile
    
    # crea una función lambda que devuelve True hasta que se encuentre la segunda clave
    take_func = lambda x: x[0] != second_key
    
    # utilizar takewhile para tomar todos los elementos hasta que se encuentre la segunda clave
    items = takewhile(take_func, items)
    
    1. Itera sobre el objeto de elementos resultante para obtener todos los elementos entre las dos claves.
    for key, value in items:
        print(key, value)
    

    Esto imprimirá:

    b 2
    c 3
    

Comments are closed.