我的问题是,我有dict(argparse)。如果flag只有一个属性,则解析器将返回string,否则返回list。 我基本上是在创建解析器,它将从输入args创建命令。 例如:
kwargs = {-name: "MyName", tags: ["tag_1", "tag_2", "tag_3"] }
需要输出:
"--name Myname --tags tag_1 tag_2 tag3"
我很乐意这样做,但我认为这不是最佳方式:/
for k, v in kwargs.iteritems():
if v is None:
continue
elif not isinstance(v, basestring):
print (v)
command = command+' {} '.format(k) + ' '.join(v)
else:
print (v)
command = command+' {} {}'.format(k, v)
我也使用argparse的这种方法来计算vars(argparse.parse_args())
的值(这不是这个问题的一部分,但也许有人知道)。这种方式一直缺少领导' - '迹象,但我想拥有它们......很多:)
例如:
--tag tag_1 tag_2 tag_3
转换为:
[tag: tag_1, tag_2, tag3]
答案 0 :(得分:1)
此功能是否产生您想要的功能:
def foo(adict):
alist = []
for k,v in adict.items():
k = '--'+k
if isinstance(v,list):
v = ' '.join([str(i) for i in v])
else:
v = str(v)
alist.append('{} {}'.format(k,v))
return ' '.join(alist)
将--
添加到密钥是微不足道的。我想你可以对它进行优化,以便只将-
添加到单个字符键。其余的是确保列表(以及可能的非字符串值)格式正确。
完成格式化的所有细化比尝试直接调整argparse
或其输出更容易。
In [38]: args = argparse.Namespace(name="MyName", tags=['tag1','tag2'], other=12)
Out[39]: Namespace(name='MyName', other=12, tags=['tag1', 'tag2'])
In [41]: vars(args)
Out[41]: {'name': 'MyName', 'other': 12, 'tags': ['tag1', 'tag2']}
In [42]: foo(vars(args))
Out[42]: '--tags tag1 tag2 --name MyName --other 12'
答案 1 :(得分:0)
不确定我是否100%理解您的问题。 但是为什么你不能使用dict如下,
kwargs = {"--name" : "MyName", "--tags" : ["tag_1", "tag_2", "tag_3"] }
那样你的命令就是
>>> command
'your_command --name MyName --tags tag_1 tag_2 tag_3'
答案 2 :(得分:0)
为了得到你想要的输出,你可以尝试这样的事情:
kwargs = {'name': "MyName", 'tags': ["tag_1", "tag_2", "tag_3"] }
final = "--{0} {1} --{2} {3}".format(list(kwargs.keys())[0], list(kwargs.values())[0], list(kwargs.keys())[1], " ".join(list(kwargs.values())[1]))
print(final)
输出:
'--name MyName --tags tag_1 tag_2 tag_3'