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 に答える