<p>这是我能想到的最好的,希望这就是你想要的。你知道吗</p>
<p>您需要以代码底部显示的形式提供参数,但您在文章中提到这是可以接受的。你知道吗</p>
<p>也就是说,使用<code>python3 script.py group 1=2=3 opt1 foo1=foo2=foo3 opt2 bar1=None=bar3 opt3 None=None=baz3</code>来重现我的结果。你知道吗</p>
<pre><code>import argparse, copy
parser = argparse.ArgumentParser()
parser.add_argument(" group", default='1')
parser.add_argument(" opt1", default='foo1')
parser.add_argument(" opt2", default='bar1')
parser.add_argument(" opt3", default='baz3')
args = parser.parse_args()
def splitter(arg):
return arg.split("=")
groups = splitter(args.group) if "=" in args.group else args.group
opt1 = splitter(args.opt1) if "=" in args.opt1 else args.opt1
opt2 = splitter(args.opt2) if "=" in args.opt2 else args.opt2
opt3 = splitter(args.opt3) if "=" in args.opt3 else args.opt3
# Dictionary with no values corresponding to just the keys in "group"
group_dict = dict.fromkeys(groups)
final_dict = copy.deepcopy(group_dict)
# Add dictionary inside each key - will remove blank keys later.
for key in group_dict:
group_dict[key] = dict.fromkeys(['opt1', 'opt2', 'opt3'])
# Now each group_dict has form
# {'3': {'opt2': None, 'opt3': None, 'opt1': None}, '2': {'opt2': None, 'opt3': None, 'opt1': None}, '1': {'opt2': None, 'opt3': None, 'opt1': None}}
# Must use group_dict['1']['opt3'] to access 1 -> opt3 -> value
for i, key in enumerate(groups):
group_dict[key]["opt1"] = opt1[i]
group_dict[key]["opt2"] = opt2[i]
group_dict[key]["opt3"] = opt3[i]
# Remove None elements - key is main dict - key2 & value are sub dict
final_dict[key] = {key2: value for key2, value in group_dict[key].items() if value != 'None'}
print(final_dict)
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>{'1': {'opt1': 'foo1', 'opt2': 'bar1'}, '2': {'opt1': 'foo2'}, '3': {'opt2': 'bar3', 'opt3': 'baz3', 'opt1': 'foo3'}}
</code></pre>
<p><strong>摘要:</strong></p>
<ol>
<li><p>如果需要,输入可以是另一种格式。<strong>(检查)</strong></p>
<p>使用与<code>python3 script.py group 1=2=3 opt1 foo1=foo2=foo3 opt2 bar1=None=bar3 opt3 None=None=baz3</code></p>类似的格式</li>
<li><p>如果使用的不是(opt1,opt2,opt3),我想引发一个错误。<strong>(检查)</strong></p>
<p>这将在默认情况下使用<code>argparse</code>实现,您可以尝试使用<code> opt4</code>。</p></li>
<li><p>我应该用argparse.ArgumentParser参数分析器(). <strong>(检查)</strong></p></li>
</ol>