Tengo el siguiente list:

is_censored = [[True, True], [False, True], [False, False]]

Que quiero colocar en un dictionary con claves / valores iguales a is_censored_1 = [True, True], is_censored_2=[False, True] y is_censored_3=[False, False].

¿Se puede lograr esto pitónicamente?

Hasta ahora tengo esto:

data = dict()
for i, value in enumerate(is_censored):
    data['_'.join(['is_censored', str(i + 1)])] = value

Que produce el resultado correcto:

data = {'is_censored_1': [True, True], 'is_censored_2': [False, True], 'is_censored_3': [False, False]}

Pero no es tan atractivo para los ojos.

0
alex_lewis 10 may. 2019 a las 15:24

3 respuestas

La mejor respuesta

Puede utilizar la comprensión de un diccionario con enumerate para formatear el < a href = "https://www.python.org/dev/peps/pep-0498/" rel = "nofollow noreferrer"> f-strings :

{f'is_censored_{i+1}': l for i,l in enumerate(is_censored)}

{'is_censored_1': [True, True],
 'is_censored_2': [False, True],
 'is_censored_3': [False, False]}

Nota: para las versiones de Python < 3.6 use string.format() como en @ devesh respuesta. Puede consultar los docs para obtener más detalles

6
yatu 10 may. 2019 a las 13:04

Puede usar la comprensión del diccionario para esto, donde obtiene tanto el índice como el elemento de la lista is_censored usando enumerate, ¡luego crea pares clave-valor en consecuencia!

is_censored = [[True, True], [False, True], [False, False]]

res = {'is_censored_{}'.format(idx+1):item for idx, item in enumerate(is_censored)}
print(res)

La salida será

{'is_censored_1': [True, True], 'is_censored_2': [False, True], 'is_censored_3': [False, False]}
2
Devesh Kumar Singh 10 may. 2019 a las 12:27
is_censored = [[True, True], [False, True], [False, False]]

res ={'is_censored_{}'.format(i+1):is_censored[i] for i in range(len(is_censored))}

Salida

{'is_censored_1': [True, True],
 'is_censored_2': [False, True],
 'is_censored_3': [False, False]}
1
sahasrara62 10 may. 2019 a las 12:29