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

Sud*_*rya 49 python unicode dictionary

我有unicode u"{'code1':1,'code2':1}",我希望它以字典格式.

我希望它的{'code1':1,'code2':1}格式.

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

谁能帮我?

aga*_*aga 82

您可以使用内置ast包:

import ast

d = ast.literal_eval("{'code1':1,'code2':1}")
Run Code Online (Sandbox Code Playgroud)

帮助模块ast中的函数literal_eval:

literal_eval(node_or_string)

安全地评估表达式节点或包含Python表达式的字符串.提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None.

  • 如果我有类似{u'a':{u'nstext':你'(文章)',u'title':u'article title',u'namespace':u'0',u'len': u'4339',u'tou'''u'20140829055924',u'id':u'28621'},u'n':u'page'}这个答案给了我ValueError:格式错误的字符串 (9认同)
  • @LawrenceDeSouza看起来你的文件有问题,而不是我的答案.不明白为什么你需要向它投票,但这取决于你. (3认同)
  • 这是我最终使用的代码看起来像:data_meta = json.loads(str(myjsonstring))也许你的代码不是用于字符串而是仅用于文件. (3认同)
  • 天哪,我一直在拔头发寻找这样的东西! (2认同)

pyr*_*ade 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)
Run Code Online (Sandbox Code Playgroud)


Ala*_*ine 12

编辑:结果我的假设不正确; 因为键没有用双引号(")包装,所以字符串不是JSON. 请参阅此处了解一下这方面的一些方法.

我猜你所拥有的可能是JSON,又名JavaScript Object Notation.

您可以使用Python的内置json模块来执行此操作:

import json
result = json.loads(u"{'code1':1,'code2':1}")   # will NOT work; see above
Run Code Online (Sandbox Code Playgroud)