Hak*_*hin 5 python string recursion dictionary python-3.x
我想递归地解析字典中所有带有字符串的值ast.literal_eval(value)
,但如果字符串不包含字典,则不执行 eval 操作。我想要这个,因为我在字典中有一个字符串,它本身就是一个字典,并且我希望该值是一个字典。最好举个例子
my_dict = {'a': 42, 'b': "my_string", 'c': "{'d': 33, 'e': 'another string'}"}
Run Code Online (Sandbox Code Playgroud)
现在我不想做,ast.literal_eval(my_dict['c'])
我想要一个通用的解决方案,我可以做convert_to_dict(my_dict)
我想编写自己的方法,但我不知道如何检查字符串是否包含字典,然后 ast.literal_eval 将失败,因此出现了问题。
其他答案非常好,引导我找到了正确的解决方案,但之前接受的答案有一个错误。这是我的工作解决方案:
def recursive_dict_eval(myDict):
for key,value in myDict.items():
try:
if(isinstance(value, dict)):
recursive_dict_eval(value)
evaled_value=ast.literal_eval(value)
assert isinstance(evaled_value,dict)
myDict[key]=recursive_dict_eval(evaled_value)
except (SyntaxError, ValueError, AssertionError):
#SyntaxError, ValueError are for the literal_eval exceptions
pass
return myDict
Run Code Online (Sandbox Code Playgroud)