Python 使用 ArgumentParser 将 List[str] 转换为 Dict[str, str]

Python convert List[str] to Dict[str, str] using ArgumentParser

我需要解析命令行参数 - 将 List[str] 转换为 Dict[str, str]

['key1=value1', 'key2=value2'] -> {key1: value1, key2:value2}

我使用以下代码:

 parser.add_argument(
        '--model-config',
        nargs='+',
        type=model_config_str_to_dict        
    )

其中model_config_str_to_dict(model_config: List[str])是一个将list转换为dict的函数。但是 List[str] 我得到 model_config 参数的 str

我的问题是如何解析 --model-config 参数以将其转换为字典?

type 参数应用于 --model-config 之后的每个输入,在 之前它们被附加到存储在解析参数中的列表中属性 .model_config。换句话说,model_config的值将是List[model_config_str_to_dict(mc_arg)],而不是model_config_str_to_dict(List[mc_arg])

举个例子:

import argparse

def model_config_split(s):
    k, v = s.split('=', 1)
    return (k, v)

parser = argparse.ArgumentParser()
parser.add_argument( '--model-config',
        nargs='+',
        type=model_config_str_to_dict)

args = parser.parse_args(['--model-config', 'key1=value1', 'key2=value2'])
print(args.model_config)

# prints:
# [('key1', 'value1'), ('key2', 'value2')]

如果要将其转换为字典,可以在 解析参数后进行。

args.model_config = dict(args.model_config)
print(args.model_config)

# prints:
# {'key1': 'value1', 'key2': 'value2'}