是否有任何库可以在Python中解析sys.argv中的随机键值对?
例如:
python run.py --v1 k1 --v2 k2 --v3 k3
应该给我一个字典,如{v1-> k1,v2-> k2,v3-> k3}。在编译时我不知道'v'会是什么。
谢谢!
厄尔本
答案 0 :(得分:0)
d = {}
for i,arg in enumerate(sys.argv):
if arg.startswith("--"):
d[arg[2:]] = sys.argv[i+1]
print d
答案 1 :(得分:0)
这有点hacky,但你确实有这个:
import argparse
import collections
parser = argparse.ArgumentParser()
known, unknown_args = parser.parse_known_args()
unknown_options = collections.defaultdict(list)
key = None
for arg in unknown_args:
if arg.startswith('--'):
key = arg[2:]
else:
unknown_options[key].append(arg)
答案 2 :(得分:0)
在使用字典理解的较新的Python中,你可以像这样使用一个衬里:
ll = sys.argv[1:]
args = {k[2:]:v for k,v in zip(ll[::2], ll[1::2])}
# {'v1': 'k1', 'v2': 'k2', 'v3': 'k3'}
如果您的用户搞砸了配对,它没有任何灵活性,但这将是一个快速的开始。
可以使用生成器弹出sys.argv[1:]
之外的字符串对。这将是建立灵活性和错误检查的好地方。
def foo(ll):
ll = iter(ll)
while ll:
yield ll.next()[2:], ll.next()
{k:v for k,v in foo(ll)}