我有以下字符串:
str = "{application.root.category.id:2}"
Run Code Online (Sandbox Code Playgroud)
我想将上面的内容转换为 python 中的字典数据类型,如下所示:
dict = {application.root.category.id:2}
Run Code Online (Sandbox Code Playgroud)
我尝试使用 eval() ,这是我得到的错误:
AttributeError:java包“application”没有属性“root”
我当前的 python 是 <2.3 ,我无法将 python 更新到 >2.3 。
有什么解决办法吗?
Python 字典的键不一定是字符串;因此,当您编写时,如果它是一个字符串,则{a: b}需要用引号引起来。a({1:2}例如,将整数1 映射到整数 2。)
所以你不能只传递你必须传递的东西eval。你需要自己解析它。(或者,如果它碰巧更容易,请更改生成它的任何内容以在键两边加上引号。)
具体如何解析它取决于您的词典实际上是什么样子;例如,值本身可以是字典吗,或者它们总是数字,还是什么?这是一个简单但可能过于粗糙的方法:
contents = str[1:-1] # strip off leading { and trailing }
items = contents.split(',') # each individual item looks like key:value
pairs = [item.split(':',1) for item in items] # ("key","value"), both strings
d = dict((k,eval(v)) for (k,v) in pairs) # evaluate values but not strings
Run Code Online (Sandbox Code Playgroud)