Lista de Python como nombre de variable

He estado jugando con Python y tengo esta lista que necesito resuelta. Básicamente escribo una lista de juegos en la matriz multidimensional y luego, para cada uno, creará 3 variables basadas en esa primera entrada.

Array que se hace:

Applist = [ ['Apple', 'red', 'circle'], ['Banana', 'yellow', 'abnormal'], ['Pear', 'green', 'abnormal'] ] 

Por bucle para asignar a cada fruta un nombre, color y forma.

 for i in Applist: i[0] + "_n" = i[0] i[0] + "_c" = i[1] i[0] + "_s" = i[2] 

Al hacer esto, sin embargo, recibo un mensaje de “no se puede asignar al operador”. ¿Cómo puedo combatir esto?

El resultado esperado sería:

 Apple_n == "Apple" Apple_c == "red" Apple_s == "circle" 

Etc para cada fruta.

Esta es una mala idea. No debe crear dinámicamente nombres de variables, use un diccionario en su lugar:

 variables = {} for name, colour, shape in Applist: variables[name + "_n"] = name variables[name + "_c"] = colour variables[name + "_s"] = shape 

Ahora accede a ellos como variables["Apple_n"] , etc.

Sin embargo, lo que realmente quieres es un dictado de dictados:

 variables = {} for name, colour, shape in Applist: variables[name] = {"name": name, "colour": colour, "shape": shape} print "Apple shape: " + variables["Apple"]["shape"] 

O, quizás incluso mejor, un namedtuple :

 from collections import namedtuple variables = {} Fruit = namedtuple("Fruit", ["name", "colour", "shape"]) for args in Applist: fruit = Fruit(*args) variables[fruit.name] = fruit print "Apple shape: " + variables["Apple"].shape 

namedtuple embargo, no puede cambiar las variables de cada Fruit si utiliza un grupo con namedtuple (es decir, no hay variables["Apple"].colour configuración variables["Apple"].colour a "green" ), por lo que quizás no sea una buena solución, dependiendo del uso previsto. Si le gusta la solución de namedtuple pero desea cambiar las variables, puede convertirla en una clase de Fruit su totalidad, que puede usarse como un reemplazo namedtuple Fruit namedtuple en el código anterior.

 class Fruit(object): def __init__(self, name, colour, shape): self.name = name self.colour = colour self.shape = shape 

Sería más fácil hacer esto con un diccionario:

 app_list = [ ['Apple', 'red', 'circle'], ['Banana', 'yellow', 'abnormal'], ['Pear', 'green', 'abnormal'] ] app_keys = {} for sub_list in app_list: app_keys["%s_n" % sub_list[0]] = sub_list[0] app_keys["%s_c" % sub_list[0]] = sub_list[1] app_keys["%s_s" % sub_list[0]] = sub_list[2]