在Python中重命名字典的键/值

2 投票
1 回答
4248 浏览
提问于 2025-04-16 04:01

我想做的是这样的。我有一个字典,结构是这样的:

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)

显然我没有正确地做到这一点,那我该怎么做呢?我应该创建一个空字典,然后动态地填充必要的数据吗?还是有更好的方法?谢谢大家的帮助!

[编辑] 这里的 if side == '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

那就对列表中的每个元素都进行替换吧。

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:] 来进行替换会更好,而不是用正则表达式。

撰写回答