cómo convertir variable en cadena en Python

Tengo un problema similar a este, pero no sé cuál es el término

cat=5 dog=3 fish=7 animals=[cat,dog,fish] for animal in animals: print animal_name+str(animal) #by animal name, i mean the variable thats being used 

Se imprimiría,

 cat5 dog3 fish7 

Así que me pregunto si hay un método o función real que podría usar para recuperar la variable que se está utilizando y convertirla en una cadena. Esperemos que esto se pueda hacer sin crear cadenas para cada animal.

EDITAR:

¿Hay una manera de hacer esto sin diccionarios?

Básicamente estás preguntando “¿Cómo puede mi código descubrir el nombre de un objeto?”

 def animal_name(animal): # here be dragons return some_string cat = 5 print(animal_name(cat)) # prints "cat" 

Una cita de Fredrik Lundh (en comp.lang.python) es particularmente apropiada aquí.

De la misma forma que obtiene el nombre del gato que encontró en su porche: el gato (objeto) en sí mismo no puede decirle su nombre, y no le importa realmente, por lo que la única forma de averiguar cómo se llama es preguntar. todos tus vecinos (espacios de nombres) si es su gato (objeto) …

… y no se sorprenda si se da cuenta de que es conocido por muchos nombres, ¡o ningún nombre en absoluto!

Solo por diversión, traté de implementar animal_name utilizando los módulos sys y gc , y descubrí que la vecindad también llamaba al objeto que conocemos cariñosamente como “cat”, es decir, el número entero literal 5, con varios nombres:

 >>> cat, dog, fish = 5, 3, 7 >>> animal_name(cat) ['n_sequence_fields', 'ST_GID', 'cat', 'SIGTRAP', 'n_fields', 'EIO'] >>> animal_name(dog) ['SIGQUIT', 'ST_NLINK', 'n_unnamed_fields', 'dog', '_abc_negative_cache_version', 'ESRCH'] >>> animal_name(fish) ['E2BIG', '__plen', 'fish', 'ST_ATIME', '__egginsert', '_abc_negative_cache_version', 'SIGBUS', 'S_IRWXO'] 

Para objetos suficientemente únicos, a veces puede obtener un nombre único:

 >>> mantis_shrimp = 696969; animal_name(mantis_shrimp) ['mantis_shrimp'] 

Entonces, en resumen:

  • La respuesta corta es: no puedes.
  • La respuesta larga es: bueno, en realidad, puedes … al menos en la implementación de cpython. Para ver cómo implementé animal_name en mi ejemplo, mira aquí .
  • La respuesta correcta es: Use un dict , como otros han mencionado aquí. Esta es la mejor opción cuando realmente necesita saber el nombre <--> asociación de objeto.

Use un diccionario en lugar de un grupo de variables.

 animals = dict(cat=5, dog=3, fish=7) for animal, count in animals.iteritems(): print animal, count 

Tenga en cuenta que es posible que no salgan (probablemente no) en el mismo orden en el que los colocó. Puede resolver esto usando collections.ordereddict o simplemente clasificando las claves si simplemente las necesita en un orden consistente:

 for animal in sorted(animals.keys()): print animal, animals[animal] 

Cambiaría a usar una variable de diccionario que le permitiría asignar fácilmente nombres de cadenas a valores.

 animalDict['cat'] = 5 animalDict['dog'] = 3 

Luego, puede interactuar a través de las teclas e imprimir lo que desee.

 myAnimals = {'cat':5,'dog':3,'fish':7} animals = ['cat','dog','fish'] for animal in animals: if myAnimals.has_key(animal): print animal+myAnimals(animal) 

En lugar de poner las variables en una lista, las pondría en un diccionario.

 d={} d['cat']=5 d['dog']=3 d['fish']=7 for item in d.keys(): print item+' '+d[item] 

Confunde el nombre de la variable con la cadena del nombre del animal:

Aquí dentro

 cat = 7 

cat es la variable, 7 su valor

En:

 cat = 'cat' 

cat sigue siendo la variable y ‘cat’ es la cadena con el nombre del animal. Puedes poner cualquier cuerda que te guste dentro de cat incluso cat = 'dog' .

Ahora volvamos a su problema: desea imprimir el nombre de un animal y un número correspondiente.

Para emparejar nombre y número, la mejor opción es usar un dict , un diccionario. { y } representan un dict (solo para completar también un set en algunos casos) :

 d = {3: 'cat', 5: 'dog', 7: 'fish'} 

d es tu variable {3: 'cat', 5: 'dog', 7: 'fish'} es tu diccionario. 3, 5, 7 son las claves de dicho diccionario y 'cat', 'dog', 'fish' son los valores correspondientes.
Ahora tienes que iterar en este diccionario. Eso se puede hacer llamando a d.items() :

 d = {3: 'cat', 5: 'dog', 7: 'fish'} for key,value in d.items(): print(value, key) 

Invertí el valor, la orden de las llaves se imprimió para imprimir el nombre antes del número.