首页 > 解决方案 > Python 从动态列表中获取键/值

问题描述

我正在使用 argparse 为我的脚本引入额外的参数。

如果传递了一个参数,我可以从其他参数中获取键和值:

parser = argparse.ArgumentParser(description='My app.')
parser.add_argument('-n', '--project-name', required=False, default='test')
args, remaining_argv = parser.parse_known_args()
set_config(remaining_argv[0], remaining_argv[1]

但我希望能够使用动态列表设置键和值。我可以通过除以 2 来获得参数的数量,但我需要通过数组来设置键和值:

parser = argparse.ArgumentParser(description='My app.')
parser.add_argument('-n', '--project-name', required=False, default='test')
args, remaining_argv = parser.parse_known_args()
number_of_additional_arguments = int(len(remaining_args)/2)
for r in range(0,number_of_additional_arguments):
   key = ??
   value = ??
   set_config(key, value)

如何动态设置键和值?

标签: pythonargparse

解决方案


一种简单的方法是以某种格式“编码”键值对。例如,逗号分隔。如果你能做到这一点,你就不需要parse_known_args并且可以parse_argsnargs='+'设置一起使用。这是一个小例子:

import argparse

parser = argparse.ArgumentParser(description="My app.")
parser.add_argument("keyvals", type=str, nargs="+", help="Key value pairs")


args = parser.parse_args()

for keyval in list(args.keyvals):
    key, val = keyval.split(",")
    print(f"key: {key}, val: {val}")

调用此脚本会产生以下输出:

> python3 argparse_question.py a,b c,d e,f
key: a, val: b
key: c, val: d
key: e, val: f

推荐阅读