53

私はユニコードを持っていu"{'code1':1,'code2':1}"て、それを辞書形式にしたいです。

{'code1':1,'code2':1}フォーマットで欲しい。

試しunicodedata.normalize('NFKD', my_data).encode('ascii','ignore')ましたが、辞書ではなく文字列を返します。

誰でも私を助けることができますか?

4

5 に答える 5

89

組み込みastパッケージを使用できます:

import ast

d = ast.literal_eval("{'code1':1,'code2':1}")

モジュールastの関数literal_evalに関するヘルプ:

literal_eval(node_or_string)

式ノードまたは Python 式を含む文字列を安全に評価します。提供される文字列またはノードは、次の Python リテラル構造のみで構成されている可能性があります: 文字列、数値、タプル、リスト、辞書、ブール値、およびなし。

于 2013-02-19T05:19:49.663 に答える
16

を使用できますliteral_eval。また、他の何かではなく、dictを作成していることを確認することもできます。の代わりにassert、独自のエラー処理を使用してください。

from ast import literal_eval
from collections import MutableMapping

my_dict = literal_eval(my_str_dict)
assert isinstance(my_dict, MutableMapping)
于 2013-02-19T05:19:04.967 に答える
12

編集:私の仮定が間違っていたことがわかりました。キーが二重引用符 (") で囲まれていないため、文字列は JSON ではありません。 これを回避する方法については、こちらを参照してください。

あなたが持っているのはJSON、別名 JavaScript Object Notationかもしれないと思います。

これを行うには、Python の組み込みjsonモジュールを使用できます。

import json
result = json.loads(u"{'code1':1,'code2':1}")   # will NOT work; see above
于 2014-04-08T09:31:15.850 に答える
0

組み込みeval関数を使用して、文字列を Python オブジェクトに変換できます。

>>> string_dict = u"{'code1':1, 'code2':1}"
>>> eval(string_dict)
{'code1': 1, 'code2': 1}
于 2013-02-19T05:19:44.340 に答える