python - 使用与同一字典中不同键对应的值替换键的值

时间:2016-10-28 11:27:09

标签: python dictionary

我没有使用Python脚本的经验,但作为项目的一项要求,我必须构建一个代码,这就是我遇到的问题 -

我有一个字典,其中包含以下值,这些字典来自unix脚本,用于设置我在python中读取的常用路径 -

{'# blah blah blah ': '', 'START_DIR': '/PATH/TO/StartDir', 'FIRST_DIR': '${START_DIR}/FirstDir', '# GIBBERISH': 'MORE GIBBERISH', 'SECOND_DIR': '${FIRST_DIR}/SecondDir'....so on and so forth}

我能够读取值,但值会像 -

FIRST_DIR="${START_DIR}/FirstDir"
SECOND_DIR="${FIRST_DIR}/SecondDir"
.....

由于unix变量在Python中读取时不会扩展,我想在字典中替换dict值中所有$ {}包含变量的值,如下所示 -

{'# blah blah blah ': '', 'START_DIR': '/PATH/TO/StartDir', 'FIRST_DIR': '/PATH/TO/StartDir/FirstDir', '# GIBBERISH': 'MORE GIBBERISH', 'SECOND_DIR': '/PATH/TO/StartDir/FirstDir/SecondDir'....so on and so forth}

我已经搜索了这个论坛,我在这个链接上找到了最接近的答案 - https://codereview.stackexchange.com/questions/80273/replace-keys-in-values-with-key-values-from-same-dictionary 但我无法让它适用于我的问题。你们中的任何人都可以帮助我吗?

谢谢你的时间!

1 个答案:

答案 0 :(得分:3)

您可以使用re.search查找unix样式变量。如果找到匹配项,请将该变量替换为字典中的变量。 while循环是因为这些变量可以引用具有更多变量的变量等。所以继续直到所有变量都被扩展。

import re
def convert_dict(d):
    while any(re.search('\${(.*)}', i) for i in d.values()):
        for key, value in d.items():
            match = re.search('\${(.*)}', value)
            if match:
                d[key] = value.replace(match.group(0), d[match.group(1)])

输出

>>> d = {'FIRST_DIR': '${START_DIR}/FirstDir',
         '# GIBBERISH': 'MORE GIBBERISH',
         '# blah blah blah ': '',
         'SECOND_DIR': '${FIRST_DIR}/SecondDir',
         'START_DIR': '/PATH/TO/StartDir'}
>>> convert_dict(d)
{'FIRST_DIR': '/PATH/TO/StartDir/FirstDir',
 'START_DIR': '/PATH/TO/StartDir',
 '# blah blah blah ': '',
 '# GIBBERISH': 'MORE GIBBERISH',
 'SECOND_DIR': '/PATH/TO/StartDir/FirstDir/SecondDir'}
相关问题