如何将任意选项字符串解析为python字典

Pla*_*oth 9 python string dictionary

我试图找到最Pythonic方式来获取包含命令行选项的字符串:

"-t 500 -x -c 3 -d"
Run Code Online (Sandbox Code Playgroud)

把它变成字典

{"-t":"500", "-x":True, "-c":"3", "-d": True}
Run Code Online (Sandbox Code Playgroud)

更新:字符串也应该能够包含--long选项,以及中间带有破折号的单词:

"-t 500 -x -c 3 -d --long-option 456 -testing weird-behaviour"
Run Code Online (Sandbox Code Playgroud)

在建议我查看OptionParse模块之前,请记住我不知道有效选项是什么或类似的东西,我只是试图将字符串放入字典中以允许基于不同的选项字典来修改它.

我正在考虑的方法是使用split()将项目放入列表,然后遍历列表并查找以短划线" - "开头的项目并将其用作键,然后以某种方式进入下一个项目价值清单.我遇到的问题是没有值的选项.我想过做的事情:

for i in range(0, len(opt_list)):
        if opt_list[i][0] == "-":
            if len(opt_list) > i+1 and not opt_list[i+1][0] == "-":
                opt_dict[opt_list[i]] = opt_list[i+1] 
            else:
                opt_dict[opt_list[i]] = True
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我似乎用C编程而不是Python编程......

jfs*_*jfs 6

要正确处理引号内的空格,您可以使用shlex.split():

import shlex

cmdln_args = ('-t 500 -x -c 3 -d --long-option 456 '
              '-testing "weird -behaviour" -m "--inside"')

args = shlex.split(cmdln_args)
options = {k: True if v.startswith('-') else v
           for k,v in zip(args, args[1:]+["--"]) if k.startswith('-')}

from pprint import pprint
pprint(options)
Run Code Online (Sandbox Code Playgroud)

产量

{'--inside': True,
 '--long-option': '456',
 '-c': '3',
 '-d': True,
 '-m': True,
 '-t': '500',
 '-testing': 'weird -behaviour',
 '-x': True}
Run Code Online (Sandbox Code Playgroud)