我有 unicode u"{'code1':1,'code2':1}"
,我想要字典格式。
我想要它的{'code1':1,'code2':1}
格式。
我试过unicodedata.normalize('NFKD', my_data).encode('ascii','ignore')
了,但它返回字符串而不是字典。
谁能帮我?
我有 unicode 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 的帮助:
文字评估(节点或字符串)
安全地评估表达式节点或包含 Python 表达式的字符串。提供的字符串或节点只能由以下 Python 文字结构组成:字符串、数字、元组、列表、字典、布尔值和无。
您可以使用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)
从文件中读取 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()
您可以使用内置eval
函数将字符串转换为 python 对象
>>> string_dict = u"{'code1':1, 'code2':1}"
>>> eval(string_dict)
{'code1': 1, 'code2': 1}