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