[英]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.