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.

Iterar a través del diccionario atrasado de Dask.

Tengo varios diccionarios retrasados ​​que devuelven una función retrasada de Dask. Me gustaría agregarlos en un summary_dict como se muestra a continuación. La función items no funciona en un objeto retrasado.

@dask.delayed
def get_dict(date):
    return {
        'a': {'date': date},
        'b': {'date': date}
    }

summary_dict = {}
dates = [d1, d2, d3, ...]
for date in dates:
    date_dict = get_dict(date)
    # lo siguiente no funciona porque date_dict es un objeto retrasado
    for key, val in date_dict.items():
        summary_dict.setdefault(key, []).append(val)

Puedo hacer lo siguiente para que funcione. Sin embargo, es bastante feo porque tengo que codificar las claves de antemano.

hardcoded_keys = ['a', 'b']
get_dict_items = {key, dask.delayed(operator.itemgetter(key)) for key in keys}

summary_dict = {}
dates = [d1, d2, d3, ...]
for date in dates:
    date_dict = get_dict(date)
    for hardcoded_key in hardcoded_keys:
        val = get_dict_items[date_dict][hardcoded_key]
        summary_dict.setdefault(key, []).append(val)

¿Hay una mejor manera de lograr esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, se puede usar el método dask.delayed.values para obtener los valores del diccionario retrasado y luego usar el método dask.delayed.key para obtener las claves. Esto le permitirá iterar sobre el diccionario retrasado sin tener que codificar las claves directamente. Por ejemplo:

    summary_dict = {}
    dates = [d1, d2, d3, ...]
    for date in dates:
        date_dict = get_dict(date)
        for key, val in dask.delayed.values(date_dict).items():
            summary_dict.setdefault(dask.delayed.key(date_dict), []).append(val)
    

Comments are closed.