如何使用python将字符串转换为字典(格式错误的字符串)

时间:2017-03-22 09:32:52

标签: python python-2.7

var yourModels : [YourModel] = []
        ref.child("data").observe(.value, with: {
            snapshot in

            for child in snapshot.children {
                let model = YourModel.init(snapshot: (child as? FIRDataSnapshot)!)
                self.yourModels.append(model)
            }


        })

我尝试了两件事

  1. 关于使用ast.literal_eval(a)输出格式错误的字符串

  2. 使用json.loads(a)或simplejson.loads(a)..输出仍然是

  3. 的字符串

    我该怎么做..把输出作为字典

2 个答案:

答案 0 :(得分:3)

如果您的字符串看起来像"{Po_list:[121,122],product_list:[343,434],site_list:[2,63]}",则只需在评估a之前通过在它们周围添加引号将键转换为字符串:

>>> import re
>>> from ast import literal_eval
>>> a = "{Po_list:[121,122],product_list:[343,434],site_list:[2,63]}"
>>> re.sub('(\w+)(?=:)', '"\g<1>\"', a)
'{"Po_list":[121,122],"product_list":[343,434],"site_list":[2,63]}'
>>> literal_eval(re.sub('(\w+)(?=:)', '"\g<1>\"', a))
{'Po_list': [121, 122], 'product_list': [343, 434], 'site_list': [2, 63]}

答案 1 :(得分:1)

literal_eval有效。你以某种方式给错了输入..

a = '{"Po_list": [121, 122], "product_list": [343, 434], "site_list": [2, 63]}'
print(type(a))  # prints: <class 'str'>

from ast import literal_eval as leval

res = leval(a)
print(type(res))  # <class 'dict'>

如果我错过了解并且未引用密钥,您应该使用regex来解决问题;看看@EricDuminil的答案