使用 argparse 处理不确定的成对参数
Posted
技术标签:
【中文标题】使用 argparse 处理不确定的成对参数【英文标题】:Handling indefinite paired arguments with argparse 【发布时间】:2013-06-12 03:22:04 【问题描述】:在my project 中,我需要定义类似的语法
mcraw recipe add COUNT ID COUNT_1 ID_1 [COUNT_2 ID_2 ..]
而argparse
似乎是一般工作的最佳工具。
如何指示 Python 及其 argparse
构造这样的字典?
ID_1: COUNT_1,
ID_2: COUNT_2,
...
【问题讨论】:
你能把语法稍微修改成mcraw recipe add COUNT ID COUNT_1,ID1 COUNT_2,ID2 ...
吗?这将使编写一个处理每个逗号分隔对并添加相应字典的自定义操作变得更加容易。
【参考方案1】:
成对阅读你的论点:
argdict = args[i + 1]: args[i] for i in xrange(0, len(args), 2)
argparse
对此类输入没有其他特殊处理。
【讨论】:
答案相同,但语法不同:argdict = arg1: arg2 for (arg1, arg2) in zip(*[iter(args)]*2)
如下所示:***.com/a/5389547/778533
@tommy.carstensen:当然,但在 Python 2 中,zip()
生成一个列表,而不是迭代器,这就是为什么该答案使用 itertools.izip()
代替。解决成对迭代问题的方法不止一种。
@tommy.carstensen:但是一旦你使用zip()
/ izip()
,就使用dict()
而不是字典理解:a = iter(args); argdict = dict(izip(a, a))
【参考方案2】:
我认为您在这里可能有错误的方法。为什么不指向一个.json
文件让您的程序在命令行上接受?
这样
$> python mcraw recipe add --recipies=my_recipies.json
你可以随意使用它,可能包括Martijn's答案中的内容
【讨论】:
您能否详细说明为什么 JSON 会是更好的格式?我非常愿意接受关于这应该如何工作的建议;我还没有真正设计数据库。您会以 JSON 文件的潜在格式进行编辑吗? 我觉得事先为应用程序创建数据更简单,但如果这不可能,创建字典并使用json.dumps
也很容易。修改单个条目也是小菜一碟。你想让我继续吗?以上是关于使用 argparse 处理不确定的成对参数的主要内容,如果未能解决你的问题,请参考以下文章
自然语言处理向量表示PairSupCon:用于句子表示的成对监督对比学习
R语言Friedman检验实战:Friedman检验是单因素重复测量方差分析的一种非参数替代方法有bonferroni校正的成对Wilcoxon秩和检验进行事后(post hoc)测试分析