我有一段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的帮助信息:
literal_eval(node_or_string)
安全地评估表达式节点或包含Python表达式的字符串。提供的字符串或节点只能由以下Python字面结构组成:字符串、数字、元组、列表、字典、布尔值和None。
literal_eval
。您可能还想确保创建的是字典,而不是其他东西。请使用自己的错误处理方法,而不是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()
with
语句中使用open()
语句时,无需调用close()
方法--一旦with
结束,它会自动发生。 - JDM您可以使用内置的eval
函数将字符串转换为Python对象
>>> string_dict = u"{'code1':1, 'code2':1}"
>>> eval(string_dict)
{'code1': 1, 'code2': 1}
eval()
对被执行的代码没有任何限制或保护。例如,它可以轻松使用os
模块来重新组织文件夹、删除文件等。这是一个严重而危险的安全漏洞。另一方面,literal_eval
非常严格受限。它只能在某些有限的表达式上运行,不会对应用程序本身以外的任何东西产生影响。 - JDM