gpt4 book ai didi

python - 使用python将字符串转换为字典

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:44 24 4
gpt4 key购买 nike

我知道这个问题听起来很重复,但事实并非如此,至少找了一段时间,我无法解决我的具体问题。

我有以下字符串:

"{first : {name : 'test', value : 100}, second : {name : 'test2', value : 50}}"

我想将该字符串转换为类似这样的字典:

{'first': {'name': 'test', 'value' : 100}, 'second': {'name': 'test2', 'value' : 50}}

有什么想法吗?我正在使用 Python 2.5

谢谢

最佳答案

首先,如果您要从字典(使用 Python 或几乎任何其他语言)生成这些字符串,您可能需要考虑以易于解析的方式生成它们。例如,在 Python 中。 repr(d)json.dumps(d) 将为您提供与现有字符串非常相似的内容,但带有正确的引号。


但是如果你只是得到别人给你的一堆字符串,最简单的方法可能是将其正则表达式转换为实际的 JSON 字符串,以便你可以解析它:

json.loads(re.sub(r",\s*(\w+)", r", '\1'", 
re.sub(r"\s*\{\s*(\w+)", r"{'\1'", x)).replace("'", '"'))

在 2.5 中,没有内置的 json 模块,所以你可能想要 pip install simplejson 然后你可以这样做:

try:
import json
except ImportError:
import simplejson as json

(或者,当然,如果您愿意,您可以无条件地要求 simplejson。)


另一种替代方法是使用 ast.literal_eval 而不是 json.loads。哪一个合适取决于有关您的字符串的更多信息。 JSON 比 Python 语法更受限制,因此如果您担心输入的来源,它会更安全,但如果您的输入可能合法地包含 JSON 无法处理的内容,例如 1+3j

但是,与 json 一样,ast 是 2.6 的新功能,并且 PyPI 上没有可用的替代品。幸运的是,2.5 确实_ast 模块,您只需复制并粘贴 2.6 的 ast.py 中的源 literal_eval ,但这有点麻烦。 ActiveState 也有食谱,比如 http://code.activestate.com/recipes/364469/这虽然与 literal_eval 不同,但可能适合您的目的。

这仍然无法正常工作,因为您还缺少示例字符串中的右右大括号。我希望那是一个打字错误,这样就没有问题了。

如果不是,您需要解释您希望它在此类情况下实际执行的操作。也许自动关闭任何未关闭的括号?如果是这样,未闭合的括号也会成为问题吗?

关于python - 使用python将字符串转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13297654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com