Tengo un conjunto de enteros en forma de tupla que forman mis claves (a,b) . Necesito construir un diccionario donde, para cada clave, se coloque un valor (flotante) en una de las dos listas que actúa como valor de par:
(a,b) : [x_list,y_list] Estoy construyendo el diccionario a partir de un archivo txt donde cada línea tiene la tupla (a,b) y UNO de los valores de tipo x o y que deben agregarse a la lista. Sin embargo, no entiendo cómo se puede hacer esto.
Ser más preciso:
si el archivo txt contiene:
15,17,x_type,-1.1 15,17,y_type,44 1,2,y_type,-0.38 15,17,y_type,5el diccionario debe producir
d: {(1,2): [[], [-0.38]] , (15,17): [[-1.1], [5,44]]Lo que estoy intentando:
example = ['15,17,x_type,-1.1','15,17,y_type,44','1,2,y_type,-0.38','15,17,y_type,5'] for _ in example: [a,b,val_type,val] = _.split(',') if val_type == 'x_type': d[(a,b)] = [val,] if val_type == 'y_type': d[(a,b)] = [,val] La sintaxis permite [x,] , pero no [,y] . ¿Por qué?
Las listas pueden contener comas finales. [x,] es lo mismo que [x] . Para agregar a una lista anidada específica, seleccione la que desee por índice:
if type == 'x_type': d[(a,b)][0].append(x) elif type == 'y_type': d[(a,b)][1].append(y)Esto supone que crea una nueva lista anidada tan pronto como encuentra una clave:
if (a, b) not in d: d[a, b] = [[], []] Otro buen truco sintáctico es que cualquier cosa con comas en una expresión de indexación se interpreta como una tupla. Eso significa que puede escribir d[(a, b)] como d[a, b] .