如何将格式错误的字符串转换为字典?

lu4*_*4nx 3 python string dictionary

我有一个字符串s(注意,ab没有用引号括起来,所以它不能直接评估为a dict):

s = '{a:1,b:2}'
Run Code Online (Sandbox Code Playgroud)

我想将此变量转换为dict如下所示:

{'a':1,'b':2}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

mgi*_*son 5

这将适用于您的示例:

import ast
def elem_splitter(s):
    return s.split(':',1)

s = '{a:1,b:2}'
s_no_braces = s.strip()[1:-1] #s.translate(None,'{}') is more elegant, but can fail if you can have strings with '{' or '}' enclosed.
elements = (elem_splitter(ss) for ss in s_no_braces.split(','))
d = dict((k,ast.literal_eval(v)) for k,v in elements)
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的字符串格式为:

'{s:"foo,bar",ss:2}'  #comma in string is a problem for this algorithm
Run Code Online (Sandbox Code Playgroud)

要么:

'{s,ss:1,v:2}' 
Run Code Online (Sandbox Code Playgroud)

但它会传递一个字符串,如:

'{s ss:1,v:2}' #{"s ss":1, "v":2}
Run Code Online (Sandbox Code Playgroud)

您可能还需要elem_splitter稍微修改,具体取决于您的需求:

def elem_splitter(s):
    k,v = s.split(':',1)
    return k.strip(),v # maybe `v.strip() also?`
Run Code Online (Sandbox Code Playgroud)

*其他人可能会使用更多的ast模块做一个更好的例子,但我不太清楚它的内部结构,所以我怀疑我是否有时间做出这个答案.