3

我有以下字符串:

str = "{application.root.category.id:2}"

我想将以上内容转换为 python 中的字典数据类型,如下所示:

dict = {application.root.category.id:2}

我尝试使用 eval() ,这是我得到的错误:

AttributeError:java包'application'没有属性“root”

我当前的 python 是 <2.3 ,我无法将 python 更新到 >2.3 。

有什么解决办法吗?

4

3 回答 3

5

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
于 2012-06-11T11:13:20.680 回答
3

首先,'dict' 是类型名称,因此不适合变量名称。

以下,完全按照你的要求......

a_dict = dict([str.strip('{}').split(":"),])

但是,如我所料,如果您想向字典添加更多映射,则需要采用不同的方法。

于 2012-06-11T11:13:59.797 回答
0

假设我有一个字符串

str='{1:0,2:3,3:4}'
str=str.split('{}')
mydict={}
for every in str1.split(','):
    z=every.split(':')
    z1=[]
    for every in z:
        z1.append(int(every))
    for k in z1:
        mydict[z1[0]]=z1[1]

输出: mydict {1: 0, 2: 1, 3: 4}

于 2013-11-22T10:58:50.147 回答