繁体   English   中英

替换键值与对应于同一字典中的不同键的值

[英]python - Replace values of keys with values corresponding to different keys in the same 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-字典,但无法解决我的问题。 你们任何人都可以帮我吗?

谢谢你的时间!

您可以使用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'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM