ast.literal_eval() 在具有空键值的字典上

ast.literal_eval() on a dict which has a null key value

我正在尝试使用 literal_eval() 将字符串转换为字典,我在这里面临的唯一问题是其中一个字典值中有一个空值。

attributes = '{"New Value": "United States", "Old Value": null, "Reason": "lorem ipsum", "Source": "Action"}'

这是我的输入字典,我在传递给 literal_eval() 之前将其转换为字符串。 当我使用代码进行文字评估时:

attributes_new = ast.literal_eval(attributes)

代码运行时出现此错误:

ValueError: malformed node or string: <ast.Name object at 0x1066efa30>

有什么办法可以用None替换这个null,这样它就不会失败,或者如果有更好的优化解决方案,欢迎提出。提前致谢。

attributes_new = ast.literal_eval(attributes.replace('null', 'None'))

...我会这样做,因为它简单易读。


编辑:我刚刚注意到它看起来很像 JSON。也许改用 json.loads

你可以用两种方法来解决这个问题-

  • 使用json包
    您可以使用直接 jason.load pacakge 如下删除 null
import json
attributes_None = json.loads(attributes)
  • 使用ast包
    首先,您必须将 null 替换为 None
import ast
attributes = attributes.replace('null','None')
new_attributes = ast.literal_eval(attributes)