在unthon中将unicode字符串字典转换为字典

时间:2013-02-19 05:10:48

标签: python unicode dictionary

我有unicode u"{'code1':1,'code2':1}",我想用字典格式。

我想要{'code1':1,'code2':1}格式。

我尝试了unicodedata.normalize('NFKD', my_data).encode('ascii','ignore'),但它返回的字符串不是字典。

任何人都可以帮助我吗?

5 个答案:

答案 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}