Python将字符串转换为dict

时间:2017-12-05 22:38:10

标签: python string dictionary

我有一个字符串:

'{tomatoes : 5 , livestock :{cow : 5 , sheep :2 }}' 

并希望将其转换为

{
  "tomatoes" : "5" , 
  "livestock" :"{"cow" : "5" , "sheep" :"2" }"
}

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

这已在988251中解决 简而言之;使用python ast库的literal_eval()函数。

import ast
my_string = "{'key':'val','key2':2}"
my_dict = ast.literal_eval(my_string)

答案 1 :(得分:-1)

你有一个JSON格式的字符串,你想转换成python字典。

使用JSON库:

import json
with open("your file", "r") as f:
    dictionary =  json.loads(f.read());

现在字典包含您要查找的数据结构。

答案 2 :(得分:-2)

输入字符串的问题在于它实际上不是有效的JSON,因为您的密钥未声明为字符串,否则您可以使用json模块加载它并完成它。

获得所需内容的简单方法是首先通过在不是空格或语法字符的所有内容周围添加引号将其转换为有效的JSON:

source = '{tomatoes : 5 , livestock :{cow : 5 , sheep :2 }}'

output = ""
quoting = False
for char in source:
    if char.isalnum():
        if not quoting:
            output += '"'
            quoting = True
    elif quoting:
        output += '"'
        quoting = False
    output += char

print(output)  #  {"tomatoes" : "5" , "livestock" :{"cow" : "5" , "sheep" :"2" }}

这为您提供了有效的JSON,现在您可以使用dict模块轻松地将其解析为Python json

import json

parsed = json.loads(output)
# {'livestock': {'sheep': '2', 'cow': '5'}, 'tomatoes': '5'}

答案 3 :(得分:-2)

以下是我的回答:

dict_str = '{tomatoes: 5, livestock: {cow: 5, sheep: 2}}'

def dict_from_str(dict_str):    

    while True:

        try:
            dict_ = eval(dict_str)
        except NameError as e:
            key = e.message.split("'")[1]
            dict_str = dict_str.replace(key, "'{}'".format(key))
        else:
            return dict_


print dict_from_str(dict_str)

我的策略是将字典str转换为dict eval。但是,我首先必须处理你的字典键没有用引号括起来的事实。我通过评估它并捕获错误来做到这一点。从错误消息中,我提取被解释为未知变量的密钥,并用引号将其括起来。