Переименование словарных ключей / значений в python - PullRequest
2 голосов
/ 11 сентября 2010

Я пытаюсь это сделать.У меня есть словарь, выложенный так:

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']}

Что я хочу сделать, это перебрать это, но заменим L_ на R_.Вот как я пытался это сделать, но не получилось, потому что он ожидает строку, и я передаю ей список.

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)

Очевидно, я не делаю это правильно, так как я могу это сделать?Должен ли я создать пустой словарь и заполнить его необходимыми данными на лету?Или есть лучший способ сделать это?Спасибо за помощь!

[edit] Команда if == 'L' проверяет, над какой стороной мы сейчас работаем.Этот сценарий используется в Maya, поэтому я создаю соединения на основе стороны, а затем соединяю их.

Основываясь на предложении KennyTM, я попробовал это:

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

, но покавозвращает правильный ключ, значение возвращается как R_

1 Ответ

3 голосов
/ 11 сентября 2010

Затем выполните подстановку для каждого элемента списка.

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)

(Кстати, лучше использовать v.replace('L_', 'R_') или просто 'R_' + v[2:], чтобы выполнить замену, а затем использовать регулярное выражение для этого.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...