我有unicode u"{'code1':1,'code2':1}"
,我想用字典格式。
我想要{'code1':1,'code2':1}
格式。
我尝试了unicodedata.normalize('NFKD', my_data).encode('ascii','ignore')
,但它返回的字符串不是字典。
任何人都可以帮助我吗?
答案 0 :(得分:78)
您可以使用内置ast
包:
import ast
d = ast.literal_eval("{'code1':1,'code2':1}")
帮助模块ast中的函数literal_eval:
literal_eval(node_or_string)
安全地评估表达式节点或包含Python表达式的字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None。
答案 1 :(得分:16)
您可以使用literal_eval
。您可能还想确保创建一个字典而不是别的东西。而不是assert
,使用您自己的错误处理。
from ast import literal_eval
from collections import MutableMapping
my_dict = literal_eval(my_str_dict)
assert isinstance(my_dict, MutableMapping)
答案 2 :(得分:10)
编辑:原来我的假设不正确;因为键没有用双引号标记("),所以字符串不是JSON。 See here了解某些方法。
我猜你所拥有的可能是JSON,a.k.a。JavaScript Object Notation。
您可以使用Python的内置json
模块执行此操作:
import json
result = json.loads(u"{'code1':1,'code2':1}") # will NOT work; see above
答案 3 :(得分:1)
当我从文件中读取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()
答案 4 :(得分:-2)
您可以使用内置eval
函数将字符串转换为python对象
>>> string_dict = u"{'code1':1, 'code2':1}"
>>> eval(string_dict)
{'code1': 1, 'code2': 1}