lu4*_*4nx 3 python string dictionary
我有一个字符串s(注意,a并b没有用引号括起来,所以它不能直接评估为a dict):
s = '{a:1,b:2}'
Run Code Online (Sandbox Code Playgroud)
我想将此变量转换为dict如下所示:
{'a':1,'b':2}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
这将适用于您的示例:
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模块做一个更好的例子,但我不太清楚它的内部结构,所以我怀疑我是否有时间做出这个答案.