ユニコード_u"{'code1':1,'code2':1}"
_があり、辞書形式で欲しいです。
_{'code1':1,'code2':1}
_形式で欲しい。
unicodedata.normalize('NFKD', my_data).encode('ascii','ignore')
を試しましたが、辞書ではなく文字列を返します。
誰も私を助けることができますか?
組み込みのast
パッケージを使用できます:
import ast
d = ast.literal_eval("{'code1':1,'code2':1}")
モジュールastの関数literal_evalのヘルプ:
literal_eval(node_or_string)
式ノードまたはPython式を含む文字列を安全に評価します。指定された文字列またはノードは、次のPythonリテラル構造:タプル、リスト、辞書、ブール値、およびなし。
literal_eval
を使用できます。また、他のことではなく、辞書を作成していることを確認することもできます。 assert
の代わりに、独自のエラー処理を使用します。
from ast import literal_eval
from collections import MutableMapping
my_dict = literal_eval(my_str_dict)
assert isinstance(my_dict, MutableMapping)
[〜#〜] edit [〜#〜]:私の仮定が間違っていたことがわかりました。キーが二重引用符( ")でラップされていないため、文字列はJSONではありません。 こちらを参照 これに関するいくつかの方法.
あなたが持っているものは [〜#〜] json [〜#〜] 、a.k.a. JavaScript Object Notationかもしれないと推測しています。
Pythonの組み込みjson
モジュールを使用してこれを行うことができます。
import json
result = json.loads(u"{'code1':1,'code2':1}") # will NOT work; see above
ファイルからjsonを読み込んでいるときにUnicodeエラーが発生していました。だからこれは私のために働いた。
import ast
job1 = {}
with open('hostdata2.json') as f:
job1= json.loads(f.read())
f.close()
#print type before converting this from unicode to dic would be <type 'unicode'>
print type(job1)
job1 = ast.literal_eval(job1)
print "printing type after ast"
print type(job1)
# this should result <type 'dict'>
for each in job1:
print each
print "printing keys"
print job1.keys()
print "printing values"
print job1.values()