<blockquote>
<p>parser.add_argument(' ls', nargs='*', type=str, default = [])
Q1: The above works but Is there a better way to access values in the list?</p>
</blockquote>
<p>我经常认为“越简单越好”,这是一种非常简单的做事方法,我认为没有更好的方法。但是,还有其他方法。在</p>
<blockquote>
<p>dict_parser.add_argument(' dict', nargs='*',type=dict,default={})
arg2 = dict_parser.parse_args(" dict {'name':'man', 'address': 'kac', 'tags':'don'}")
Q2: How does the above work for dictionary?</p>
</blockquote>
<p>我建议您使用json解析字符串:</p>
<pre><code>>>> class FromJSON():
... def __init__(self, string):
... self.string = string
... def decode(self):
... return json.loads(self.string)
...
>>> dict_parser.add_argument(' dict',type=FromJSON)
>>> arg2 = dict_parser.parse_args([' dict', '{"name":"man", "address": "kac", "tags":"don"}'])
</code></pre>
<p>虽然python不像python,但它不像python。它对引号(值仅被<em>双引号</em>包围)和(<em>没有</em>的尾随逗号)很挑剔。但至少它是安全的代码注入!当然,你应该用引号括住参数</p>
<p>您可能还有另一种解决方案,可以将dict作为参数,即去掉括号:</p>
^{pr2}$
<p>问题3:现在我想要</p>
<pre><code>python my.py ls tomato jug andes dict {'name':'man', 'address': 'kac', 'tags':'don'}
</code></pre>
<p>待解析</p>
<pre><code>>>> parser = argparse.ArgumentParser()
>>> parser.add_argument(' dict', type=FromJSON, default=FromJSON("{}"))
>>> parser.add_argument(' ls', nargs='*', type=str, default = [])
>>> args = parser.parse_args([' ls', 'tomato', 'jug', 'andes', ' dict', '{"name":"man", "address": "kac", "tags":"don"}'])
>>> args.ls
['tomato', 'jug', 'andes']
>>> args.dict
<__main__.FromJSON instance at 0x7f932dd20c20>
>>> args.dict.decode()
{u'tags': u'don', u'name': u'man', u'address': u'kac'}
</code></pre>
<p>关于<code>FromJSON()</code>,可以对其进行改进,使其类似于:</p>
<pre><code>class JsonToDict():
def __call__(self, string):
return json.loads(string)
</code></pre>
<p>您可以使用如下:</p>
<pre><code>dict_parser.add_argument(' dict',type=JsonToDict())
</code></pre>
<p>高温</p>