加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 将字符串转换为字典

发布时间:2020-12-20 12:37:56 所属栏目:Python 来源:网络整理
导读:我知道这看起来像一个愚蠢的问题,但无论如何. 我正在尝试将字典的字符串表示转换回字典. 我的工作流程如下: d = {1:2}s = str(d) 当我做: dict(s) 我明白了: ValueError: dictionary update sequence element #0 has length 1; 2 is required 当我这样做
我知道这看起来像一个愚蠢的问题,但无论如何.

我正在尝试将字典的字符串表示转换回字典.

我的工作流程如下:

d = {1:2}
s = str(d)

当我做:

dict(s)

我明白了:

ValueError: dictionary update sequence element #0 has length 1; 2 is required

当我这样做时:

json.loads(s)

我明白了:

ValueError: Expecting property name: line 1 column 1 (char 1)

如何将其转换回字典?

更新:

我应该提一下,实际数据如下:

{‘cell_num’: u”,‘home_num’: u’16047207276′,‘registration_country’:
u’US’,‘registration_ip’: u’71.102.221.29′,‘last_updated’:
datetime.datetime(2010,9,27,15,41,59),‘address’: {‘country’:
u’US’,‘state’: u’CA’,‘zip’: u”,‘city’: u’Santa Barbara’,‘street’:
u”,‘confirmed’: False,‘created’: datetime.datetime(2010,6,24,10,
23),‘updated’: datetime.datetime(2010,23)},
‘old_home_num’: u’16047207276′,‘old_cell_num’: u”}

在这种情况下,使用json.loads和ast.literal_eval()的选项是不合适的.
所以我进一步尝试用pickle标准python库反序列化它.

import pickle

pickle.loads(data)

但后来我得到:

KeyError: ‘{‘

解决方法

如果你想要一个可移植的字符串表示,使用s = json.dumps(d),然后可以使用json.loads(s)重新加载

但是,这仅限于JSON兼容类型.如果你只想在python中使用它,最强大的选项是pickle(小心:永远不要破坏不受信任的数据!).

要使用pickle.loads()创建一个可加载的字符串,您需要使用pickle.dumps()从原始对象创建它(即就像您使用json但使用pickle一样).

但是,如果您已经发布了该字符串,则可以使用eval(s)将其评估为python表达式.这通常是一个坏主意,并且使用repr仅适用于实际具有有效python代码的repr的对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读