Tengo un diccionario que se ve así

dict_ = {'ALPHA':(["data['ALPHA']", 'EMPTY'], 'N', 'N', 1),'BETA':(["data['BETA']", 'EMPTY'], 'N', 'N', 2),'GAMMA':(["data['GAMMA']", 'EMPTY'], 'N', 'N', 3)} 

Quiero agregar una constante al entero final de cada tupla de valor, para obtener

dict_ = {'ALPHA':(["data['ALPHA']", 'EMPTY'], 'N', 'N', 6),'BETA':(["data['BETA']", 'EMPTY'], 'N', 'N', 7),'GAMMA':(["data['GAMMA']", 'EMPTY'], 'N', 'N', 8)} 

Lo intenté

offset = 5
dict_.update((x, y[3]+offset) for x, y in dict_.items())

Lo que resulta en

{'ALPHA': 6, 'BETA': 7, 'GAMMA': 8}

¿Hay una mejor manera de preservar el resto de la estructura y solo actualizar la posición deseada?

3
ThatQuantDude 27 oct. 2017 a las 18:39

3 respuestas

La mejor respuesta

Puedes probar esto:

dict_ = {'ALPHA':(["data['ALPHA']", 'EMPTY'], 'N', 'N', 1),'BETA':(["data['BETA']", 'EMPTY'], 'N', 'N', 2),'GAMMA':(["data['GAMMA']", 'EMPTY'], 'N', 'N', 3)} 
final_dict = {a:tuple(list(b)[:-1]+[list(b)[-1]+5]) for a, b in dict_.items()}

Salida:

{'ALPHA': (["data['ALPHA']", 'EMPTY'], 'N', 'N', 6), 'BETA': (["data['BETA']", 'EMPTY'], 'N', 'N', 7), 'GAMMA': (["data['GAMMA']", 'EMPTY'], 'N', 'N', 8)}

Cuál es el resultado deseado.

0
Ajax1234 27 oct. 2017 a las 15:44

Aquí hay una comprensión dict para hacer eso:

# Your input dict
dict_ = {
    'ALPHA':(["data['ALPHA']", 'EMPTY'], 'N', 'N', 1),
    'BETA':(["data['BETA']", 'EMPTY'], 'N', 'N', 2),
    'GAMMA':(["data['GAMMA']", 'EMPTY'], 'N', 'N', 3)}

# The offset for the last value of the tuple
offset = 5

# The updated dict
dict_offset = {
    key: value[:-1] + (value[-1] + offset, ) for key, value in dict_.items()}
1
Daniel Lenz 27 oct. 2017 a las 15:49

No puede actualizar esos valores en su lugar, porque son tuplas. Por lo tanto, deberá iterar y regenerar cada uno con el desplazamiento.

for k, v in dict_.items():
    dict_[k] = v[:-1] + (v[-1] + offset,)
2
Daniel Roseman 27 oct. 2017 a las 15:45