如何将 str
的表示形式 dict
,例如以下字符串,转换为 dict
?
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
我不想使用 eval
。我还能用什么?
这样做的主要原因是他编写的我的同事类之一,将所有输入转换为字符串。我没有心情去修改他的课程来处理这个问题。
原文由 UberJumper 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何将 str
的表示形式 dict
,例如以下字符串,转换为 dict
?
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
我不想使用 eval
。我还能用什么?
这样做的主要原因是他编写的我的同事类之一,将所有输入转换为字符串。我没有心情去修改他的课程来处理这个问题。
原文由 UberJumper 发布,翻译遵循 CC BY-SA 4.0 许可协议
https://docs.python.org/3.8/library/json.html
JSON 可以解决这个问题,尽管它的解码器需要在键和值周围加上双引号。如果你不介意更换黑客…
import json
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
json_acceptable_string = s.replace("'", "\"")
d = json.loads(json_acceptable_string)
# d = {u'muffin': u'lolz', u'foo': u'kitty'}
请注意,如果您将单引号作为键或值的一部分,这将由于不正确的字符替换而失败。仅当您对 eval 解决方案有强烈的反感时,才推荐使用此解决方案。
关于 json 单引号的更多信息: jQuery.parseJSON throws “Invalid JSON” error due to escaped single quote in JSON
原文由 i0x539 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答874 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
您可以使用内置的
ast.literal_eval
:这比使用
eval
更安全。正如它自己的文档所说:例如: