gpt4 book ai didi

python - 使用带有 "illegal"变量名的 dict() 构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 18:04:22 24 4
gpt4 key购买 nike

我有一个应用程序,其配置文件本身就是一个包含嵌套字典的字典的Python脚本(我知道这不被认为是最佳实践)。它看起来有点像这样:

config={'section-1': {'param1': 'value1', 'param2': 'value2'},
'section-2': {'param3': 'value3', 'param4': 'value4'},
'section-1': {'param5': 'value5', 'param6': 'value6'}
}

看看那里发生了什么,有人不小心重复了section-1!这在单元测试中很难捕获,除非我不是在 Python 中导入该文件,而是将其视为文本文件并解析它。我原以为我可以使用 dict() 来创建一个相同的结构,例如

config=dict(section-1={'param1', 'value1'}, section-1={'param2': 'value2'})

SyntaxError:关键字参数重复来解决这个问题,但不幸的是我实际上得到了SyntaxError:关键字不能是表达式。没有范围可以将节名称替换为不包含 - 的节名称,也没有范围将其替换为经典的 INI 文件或类似文件,这艘船已经航行很长时间了。有什么方法可以捕获重复的键吗?

最佳答案

按照 davidc 所说:“将其视为文本文件,在解析之前对其进行预处理以更改问题标签的形式”,这适用于您的示例......

from ast import literal_eval
from collections import defaultdict

config = '''{'section-1': {'param1': 'value1', 'param2': 'value2'},
'section-2': {'param3': 'value3', 'param4': 'value4'},
'section-1': {'param5': 'value5', 'param6': 'value6'},
'section-1': {'param7': 'value7', 'param8': 'value8'}
}'''

cfg=config.replace('{','[').replace('}',']').replace(
' ','').replace('[','[(').replace(']',')]').replace(
',','),(').replace(':',',').replace('\n','')

parsed_config = {}
keys = defaultdict(int)

for s, d in literal_eval(cfg):
if s in parsed_config:
keys[s] += 1
parsed_config[s+'('+str(keys[s])+')'] = dict(d)
else:
parsed_config[s] = dict(d)

print(parsed_config)

# {'section-1(2)': {'param7': 'value7', 'param8': 'value8'},
# 'section-2': {'param4': 'value4', 'param3': 'value3'},
# 'section-1': {'param2': 'value2', 'param1': 'value1'},
# 'section-1(1)': {'param6': 'value6', 'param5': 'value5'}}

您可以扩展逻辑来测试重复的参数、值对。

关于python - 使用带有 "illegal"变量名的 dict() 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27138586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com