【问题标题】:Parsing a string to dict with Python使用 Python 解析字符串以进行 dict
【发布时间】:2021-12-22 02:05:05
【问题描述】:

我有一个这样的字符串:

/acommand foo='bar' msg='Hello World!' -debugMode

或者像这样:

/acommand
foo='bar'
msg='Hello, World!'
-debugMode

我怎样才能把这个字符串解析成一个字典和一个这样的列表:

{"command": "/acommand", "foo": "bar", "msg": "Hello World!"}

["-debugMode"]

我尝试使用string.split 来解析它,但似乎不可行。

argparse好像是为命令行界面而生的所以不适用。

如何用 Python 实现这一点?谢谢!

【问题讨论】:

  • docs.python.org/3/library/argparse.html 允许您定义自己的前缀字符 - 即给它 '/' 而不是 -
  • 您的结果dict 不是有效的python 语法。你会如何引用["-debugMode"]
  • 对不起,我忘记将列表移出字典

标签: python string dictionary parsing


【解决方案1】:

你可以试试这样的:

s = "/acommand foo='bar' msg='Hello World!' -debugMode"
debug = [s.split(" ")[-1]]
s_ = "command=" + ' '.join(s.split(" ")[:-1]).replace("'","")
d = dict(x.split("=") for x in s_.split(" ",2))
print (d)
print (debug)

{'command': '/acommand', 'foo': 'bar', 'msg': 'Hello World!'},

['-debugMode']

【讨论】:

  • 成功了,谢谢!
  • 这太脆弱了。它适用于这种非常具体的情况,但如果 foo='Hello World' 会发生什么?
  • @Axe319 在这种情况下,用户应该更详细地指定他想要的内容。我们谁也不知道预期的组合是什么,也不能为这样的任务编写一个涵盖所有内容的解决方案。你同意吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2016-07-28
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
相关资源
最近更新 更多