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

How to convert a dict string with value default dict to an actual dict

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

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

我尝试使用 ast 的 literal_eval 和 json 的 json.loads,但是其中 none 可以转换它。对于 JSON 我知道它没有 json 结构,但是我不完全理解为什么 literal_eval 不起作用。

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

一种快速而肮脏的解析方法是用实际的 class 名称替换 <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'', s))

这个returns:

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