2010-09-11 4 views
2

Ce que j'essaye de faire est ceci. J'ai un dictionnaire aménagé en tant que tel:Renommer les clés/valeurs du dictionnaire en python

legJointConnectors = {'L_hip_jnt': ['L_knee_jnt'], 'L_knee_jnt': ['L_ankle_jnt'], 'L_ankle_jnt': ['L_ball_jnt'], 'L_ball_jnt': ['L_toe_jnt']} 

Ce que je veux être en mesure de faire itérer, mais changer la L_ à R_. Voici comment j'ai essayé de le faire, mais il a échoué, car il attend une chaîne et je lui passe une liste.

for key, value in legJointConnectors.iteritems(): 
    if side == 'L': 
     cmds.connectJoint(value, key, pm=True) 
    else: 
     key = re.sub('L_', 'R_', key) 
     value = re.sub('L_', 'R_', value) 
     cmds.connectJoint(value, key, pm=True) 

De toute évidence, je ne le fais pas correctement, alors comment puis-je faire cela? Dois-je créer un dictionnaire vide et le remplir avec les données nécessaires à la volée? Ou y a-t-il une meilleure façon de le faire? Merci pour l'aide!

[edit] Le côté if == 'L' teste pour voir de quel côté nous travaillons actuellement. Ce script est utilisé au sein de Maya, donc je crée des articulations basées sur le côté, puis je les connecte.

Basé de la suggestion de KennyTM J'ai essayé ceci:

for key, value in legJointConnectors.iteritems(): 
     if side == 'L': 
      cmds.connectJoint(value, key, pm=True) 
     else: 
      for v in value: 
       value = 'R_' + v[2:] 
       for k in key:  
        key = 'R_' + k[2:] 
       print key 
      print value 

mais alors qu'il retourne la bonne clé, la valeur revient comme R_

+0

double possible de http://stackoverflow.com/questions/1076536/replacing -values-dans-un-python-liste-dictionnaire – leoluk

+0

@leoluk J'ai regardé cela, mais il ne semble pas que nous demandions la même chose. Cet utilisateur voulait remplacer des valeurs entières, où je veux simplement remplacer une partie de la valeur. –

Répondre

3

Est-ce que la substitution sur tous les éléments de la liste alors.

for key, value in legJointConnectors.iteritems(): 
    if side != 'L': 
     key = 'R_' + key[2:] 
     value = ['R_' + v[2:] for v in value] 
    cmds.connectJoint(value, key, pm=True) 

(BTW, il est préférable d'utiliser v.replace('L_', 'R_'), ou tout simplement 'R_' + v[2:] pour effectuer le remplacement puis en utilisant regex pour cela.)

+0

Eh bien, j'ai juste essayé les 3 options, mais aucune d'elles n'a fonctionné pour moi. Je suis certain que ce n'est pas votre réponse, mais ma mise en œuvre. Je suis relativement nouveau à Python, donc je suis sûr que ce sont mes douleurs de croissance. :/ –

+0

@Arrant:: \. Voir mise à jour. – kennytm

+1

Vous êtes génial. Et après avoir vu cela, je comprends maintenant, pourquoi la valeur ne s'est pas passée (parce que je ne l'appelais pas correctement - en d'autres termes, c'était ma mise en œuvre comme je l'ai déjà dit: /). Encore une fois, merci beaucoup! Python est une bête, mais j'essaie de le faire de toute façon. :) - en aparté - En tant que débutant en python, j'adore les dictionnaires, mais c'est la chose pour laquelle j'ai le plus besoin d'aide. Ce serait bien s'il y avait de bonnes ressources (autres que les docs) qui expliquaient comment les utiliser efficacement (comme votre exemple). –