web-dev-qa-db-ja.com

Unicode文字列辞書をpythonの辞書に変換します

ユニコード_u"{'code1':1,'code2':1}"_があり、辞書形式で欲しいです。

_{'code1':1,'code2':1}_形式で欲しい。

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

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

46
Sudhir Arya

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

import ast

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

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

literal_eval(node_or_string)

式ノードまたはPython式を含む文字列を安全に評価します。指定された文字列またはノードは、次のPythonリテラル構造:タプル、リスト、辞書、ブール値、およびなし。

79
aga

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

from ast import literal_eval
from collections import MutableMapping

my_dict = literal_eval(my_str_dict)
assert isinstance(my_dict, MutableMapping)
16
pyrospade

[〜#〜] 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
11
Alastair Irvine

ファイルから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()
1
Meena Rajani