Python argparse 字典 arg

2024-03-24

我想收到一个dict(str -> str)来自命令行的参数。做argparse.ArgumentParser提供吗?或者还有其他图书馆吗?

对于命令行:

program.py --dict d --key key1 --value val1 --key key2 --value val2

我期望以下词典:

d = {"key1": "val1", "key2": "val2"}

这是另一种解决方案,使用自定义动作,如果你想一起指定 dict 密钥对,以逗号分隔 --

import argparse
import sys
parser = argparse.ArgumentParser(description='parse key pairs into a dictionary')

class StoreDictKeyPair(argparse.Action):
     def __call__(self, parser, namespace, values, option_string=None):
         my_dict = {}
         for kv in values.split(","):
             k,v = kv.split("=")
             my_dict[k] = v
         setattr(namespace, self.dest, my_dict)

parser.add_argument("--key_pairs", dest="my_dict", action=StoreDictKeyPair, metavar="KEY1=VAL1,KEY2=VAL2...")

args = parser.parse_args(sys.argv[1:])
print args

Running:

python parse_kv.py --key_pairs 1=2,a=bbb,c=4 --key_pairs test=7,foo=bar

Output:

Namespace(my_dict={'1': '2', 'a': 'bbb', 'c': '4', 'test': '7', 'foo': 'bar'})

如果你想使用nargs而不是字符串中的逗号分隔值:

class StoreDictKeyPair(argparse.Action):
     def __init__(self, option_strings, dest, nargs=None, **kwargs):
         self._nargs = nargs
         super(StoreDictKeyPair, self).__init__(option_strings, dest, nargs=nargs, **kwargs)
     def __call__(self, parser, namespace, values, option_string=None):
         my_dict = {}
         print "values: {}".format(values)
         for kv in values:
             k,v = kv.split("=")
             my_dict[k] = v
         setattr(namespace, self.dest, my_dict)

parser.add_argument("--key_pairs", dest="my_dict", action=StoreDictKeyPair, nargs="+", metavar="KEY=VAL")

args = parser.parse_args(sys.argv[1:])
print args

Running

python arg_test4.py --key_pairs 1=2 a=bbb c=4 test=7 foo=bar

Outputs:

values: ['1=2', 'a=bbb', 'c=4', 'test=7', 'foo=bar']
Namespace(my_dict={'1': '2', 'a': 'bbb', 'c': '4', 'test': '7', 'foo': 'bar'})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python argparse 字典 arg 的相关文章

随机推荐

  • React-native-paper 的复选框中出现了奇怪的十字

    I am using a checkbox from react native paper library but when I render that checkbox in my component a strange special
  • Maven 继承和聚合示例架构

    我有一个问题 关于如何使用继承和聚合的组合最好地重新构建多个单独的 Maven 项目 设置场景 有 3 个基于代码的现有 Maven 项目 全部由同一团队开发 1 项目是一个API 我们调用的是project api 另外 2 个项目是使用
  • 给定项目句柄,获取 Canvas 小部件上项目的当前坐标?

    通过阅读文档 http effbot org tkinterbook canvas htm reference http effbot org tkinterbook canvas htm reference 在我看来没有办法做到这一点 只
  • 运行比内核数量更多的分区是否有意义?

    鉴于 Spark 任务数量不能高于核心数量 运行比核心数量更多的分区是否有意义 如果是这样 您能详细说明一下吗 正如您提到的 您需要至少 1 个任务 核心才能利用所有集群的资源 根据每个阶段 任务所需的处理类型 您可能会遇到处理 数据倾斜
  • 如何在单个 mysql 查询中连接多个关系表中的多个值

    我的 旅行优惠 项目有一个大问题 99 正常 但不是 100 我有一个包含报价的主表 其中每个报价可以设置多个部门城市以及多个目的地城市 这是减少列的减少样本 例如 我提供一些从英格兰出发的旅行 其中部门城市可以是伦敦 利兹和曼彻斯特 目的
  • Android 无法捕获 NullPointerException

    我的应用程序中有一个非常烦人的 NPE 但找不到解决方案 首先是堆栈跟踪 09 12 23 27 32 855 ERROR AndroidRuntime 19152 java lang NullPointerException 09 12
  • 为了确保数值稳定性,scipy.signal.deconvolve 的除数参数有哪些限制?

    这是我的问题 我将处理来自系统的数据 我将很好地了解该系统的脉冲响应 之前使用 Python 进行过一些基本脚本编写 我开始了解 scipy signal convolve 和 scipy signal deconvolve 函数 为了对我
  • 哲学家就餐实施[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我只是想知道这是否可以解决java中的哲学家就餐问题 import java util concurrent locks Lock import ja
  • Scala self 类型和集合中的 this.type 问题

    我试图理解 scala 中抽象和显式的自我类型 让我们考虑这个例子 我想为可扩展树创建一个基础 就像这样简单 trait Tree def children Iterable Tree def descendants Iterable Tr
  • 如何在 Fluent NHibernate 中将“级联删除”选项设置为“设置空”?

    我是 Fluent nHibernate 的新手 想知道 如果我有两个类 Profile 和 Email 一对多映射 如下所示 我想流畅地定义一个 nHibernate 映射 这样当 Profile 被删除时 Email 将保留在DB 键设
  • 从 Android 加速度计获取倾斜角度

    我有一个实现的类SensorEventListener我想得到 这tilt Angle我的设备使用Accelerometer 我在互联网上寻找示例 但他们使用Sensor TYPE MAGNETIC FIELD 我相信我的设备没有这个传感器
  • 我解释 DI 和 IoC 的方式有什么问题?

    昨天在一次采访中我被问到春季的 DI 和 IoC 是什么 我的回复是 when a class A 延伸摘要class B 或实施interface B 或创建一个对象class B 其中任何一个类 那么A据说是 依赖于B 注入这个依赖关系
  • winforms:使用parallel.foreach更新进度

    我没有看到任何与我的问题相关的帖子 因此 如果我发布已经提出的问题 我深表歉意 我有一个 Windows 窗体程序 C 用于检查股票并进行分析 主窗体通过新线程和 ShowDialog 启动另一个窗体 当它加载时 它正在运行parallel
  • Spring ThreadPoolTask​​Executor 的工作原理

    我一直在阅读 Spring 的 ThreadPoolTask Executor 的设置如何协同工作以及线程池和队列如何工作 This https stackoverflow com a 43874563 10727434stackoverf
  • 如何在 swift 中向我的 cocoa 应用程序添加设置?

    我对 Swift 编程还很陌生 我想知道是否有一种简单的方法可以在 Swift 中向我的 Cocoa 应用程序添加设置 首选项 如果可能的话 我想要一份分步指南 我主要想知道如何将用户的首选项存储在磁盘和代码部分上 在我当前的代码中 它将需
  • .NET 多个类库合二为一

    我在VS2008中工作 我有一个自定义类库 CL1 它引用另一个自定义类库 CL2 最终我的发布文件夹中包含了 CL1 和 CL2 现在 CL1 的使用者需要在项目中包含两个 dll 我认为这是不合适的 我强烈地感觉到必须有一种方法来实现单
  • 在用户接受同意之前暂时禁用 Firebase 的所有服务

    我有一个实施了 Firebase 的应用程序 我想要的是在用户接受数据收集同意之前禁用与 Firebase 相关的所有内容 在 android 文档中 我看到 例如 我可以使用以下方法禁用 Firebase Analytics setAna
  • 该字段泄漏上下文对象

    我在非 Activity 中使用 Context 对象 它工作正常 但问题是它显示警告 That is where I am using the context object Here is the result of inspection
  • 如何在 JDBC url 中正确传递会话变量?

    我必须增加group concat max len 我无法通过preparestatement 做到这一点 而且我也无法在mysql my conf 文件中做到这一点 我在 mysql 文档中发现有一个选项可以在 url 中传递会话变量 但
  • Python argparse 字典 arg

    我想收到一个dict str gt str 来自命令行的参数 做argparse ArgumentParser提供吗 或者还有其他图书馆吗 对于命令行 program py dict d key key1 value val1 key ke