如何将默认值dict字符串转换为实际dict

时间:2018-12-11 21:20:08

标签: python string dictionary defaultdict

我正在尝试将以下字符串转换为字典:

"{'key1': 0, 'key2': defaultdict(<class 'int'>, {'total': 9, 'semcor': 9})}"

我尝试使用来自ast的literal_eval和来自json的json.loads,但是他们都无法将其转换。对于JSON,我知道它没有json结构,但是我不完全理解为什么literal_eval无法正常工作。

有人可以告诉我是否可以这样做?

1 个答案:

答案 0 :(得分:2)

一种快速而肮脏的解析方法是用实际的类名替换<class 'int'>表示法,然后eval替换字符串:

from collections import defaultdict
import re
s = '''"{'key1': 0, 'key2': defaultdict(<class 'int'>, {'total': 9, 'semcor': 9})}"'''
eval(re.sub(r"<class '(\w+)'>", r'\1', s))

这将返回:

{'key1': 0, 'key2': defaultdict(int, {'total': 9, 'semcor': 9})}