2010-08-25 6 views
1

J'ai été à la recherche sur ce point, mais je vais un peu court sur exactement comment faire spécifiquement ce que je suis en train de faire .. Je veux concaténer une chaîne (je suppose que ce serait une chaîne dans ce cas une variable et une chaîne) comme ci-dessous, où je dois utiliser une variable composée d'une chaîne pour appeler un nom de liste qui a un index (d'une autre variable). J'ai simplifié mon code ci-dessous pour simplement montrer les parties pertinentes. macro qui remplace les valeurs:Python, chaîne (composée de variables et de chaînes, concaténées) utilisée comme nouveau nom de variable?

toreplacetype = 'type' 
toreplace_indx = 5 
replacement_string = 'list'+toreplacetype[toreplace_indx] 

alors ... Je suis en train de faire la chaîne sur la dernière ligne correspondant au nom de la variable réelle:

replacement_string = listtype[5] 

Des conseils sur la façon de le faire est apprécié

EDIT:

Pour expliquer plus loin, ceci est pour une macro qui est en quelque sorte d'un système de template où j'indique les choses dans un script python que je veux remplacer avec des valeurs spécifiques, donc j'utilise regex pour le faire. Donc, quand je fais correspondre quelque chose, je veux pouvoir le remplacer d'une valeur spécifique dans une liste, mais, par exemple, dans le template j'ai {{type}}, donc je l'extrait, mais ensuite j'ai besoin de manipuler comme ci-dessus pour que je puisse utiliser la valeur extraite "type" pour appeler une valeur spécifique depuis une liste (comme dans une liste appelée "listtype") (il y a plus d'une liste donc j'ai besoin de trouver celle appelée " listType » donc je veux juste concaténer comme ci-dessus pour obtenir ce, en fonction de la valeur que j'extrait à l'aide regex

+0

J'essaie d'être sûr de la méthode de ignacio ci-dessous, serait-ce correct: vars = { 'liste': 'liste' + toreplacetype}; replacement_string = vars ['list'] [5] ? – Rick

Répondre

1

ce n'est pas recommandé. Utilisez un dict à la place.

vars['list%s' % toreplacetype][5] = ... 
+0

pourriez-vous élaborer un peu plus, je ne sais pas exactement comment je pourrais utiliser cela pour appeler une liste, comme une liste appelée "listtype" (avec index5) – Rick

+0

'vars = {}; vars ['listtype'] = [] ' –

+0

Je suppose que je ne suis pas en train de suivre comment cela se rapporte à ma question, j'apprécie votre aide dans ce cas. – Rick

0
replacement_string = 'list'+toreplacetype+'['+str(toreplace_indx)+']' 

cédera listType [ 5] quand y ou imprimez-le.

Vous devez essentiellement le diviser en 5 parties: 1 corde variable, 3 cordes et un int casted à une corde.

Je pense que c'est ce que vous demandez?

+0

J'aurais dû en dire plus à ce sujet je suppose ... (Je vais éditer ci-dessus pour expliquer plus) ..Je veux ceci: 'list' + toreplacetype [toreplace_indx] pour égaler le nom de variable de listtype [5] – Rick

1

Hmm ...

globals()['list%s'% toreplacetype][toreplace_indx] 
+0

Ok, il semble que ces types de choses continuent à revenir à globals() ou locals() pour moi donc je suppose que python this est la façon de faire ce genre de chose, j'étudierai les globales plus en profondeur puis pour en apprendre les tenants et les aboutissants – Rick

+0

'globals' renvoie juste un dict d'objets dans la portée globale. Je recommande d'utiliser la méthode d'Ignacio, car elle évite l'espace de noms global. –

Questions connexes