zoukankan      html  css  js  c++  java
  • Python字符串转为字典方法大全

    方法一: 通过内置函数eval

    str_info = '{"name": "test", "age": 18}'
    dict_info = eval(str_info)
    
    print("string info type is -->: %s" % (type(str_info)))
    print("dict info type is -->: %s" % (type(dict_info)))
    print(dict_info)
    
    s_info = "{'name': 'nock', 'age': 18}"
    d_info = eval(s_info)
    
    print("string info type is -->: %s" % (type(s_info)))
    print("dict info type is -->: %s" % (type(d_info)))
    print(d_info)
    

      

    F:pythonpython35python.exe E:/code/clself/Test/test_example1.py
    string info type is -->: <class 'str'>
    dict info type is -->: <class 'dict'>
    {'name': 'test', 'age': 18}
    string info type is -->: <class 'str'>
    dict info type is -->: <class 'dict'>
    {'name': 'nock', 'age': 18}
    
    Process finished with exit code 0
    

      

    不过使用eval有一个安全性问题

    方法二: 通过json模块处理

    import json
    str_info = '{"name": "test", "age": 18}'
    dict_info = json.loads(str_info)
    
    print("string info type is -->: %s" % (type(str_info)))
    print("dict info type is -->: %s" % (type(dict_info)))
    print(dict_info)
    
    s_info = "{'name': 'nock', 'age': 18}"
    d_info = json.loads(s_info)
    
    print("s info type is -->: %s" % (type(s_info)))
    print("d info type is -->: %s" % (type(d_info)))
    print(d_info)
    

    结果如下:

    F:pythonpython35python.exe E:/code/clself/Test/test_example1.py
    string info type is -->: <class 'str'>
    dict info type is -->: <class 'dict'>
    {'name': 'test', 'age': 18}
    Traceback (most recent call last):
      File "E:/code/clself/Test/test_example1.py", line 10, in <module>
        d_info = json.loads(s_info)
      File "F:pythonpython35libjson\__init__.py", line 319, in loads
        return _default_decoder.decode(s)
      File "F:pythonpython35libjsondecoder.py", line 339, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "F:pythonpython35libjsondecoder.py", line 355, in raw_decode
        obj, end = self.scan_once(s, idx)
    json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
    
    Process finished with exit code 1
    

      

    使用json模块进行转换存在一个问题,由于json语法规定 数组或对象之中的字符串必须使用双引号,不能使用单引号

    方法三: 通过ast模块处理【推荐使用】

    import ast
    str_info = '{"name": "test", "age": 18}'
    dict_info = ast.literal_eval(str_info)
    
    print("string info type is -->: %s" % (type(str_info)))
    print("dict info type is -->: %s" % (type(dict_info)))
    print(dict_info)
    
    s_info = "{'name': 'nock', 'age': 18}"
    d_info = ast.literal_eval(s_info)
    
    print("s info type is -->: %s" % (type(s_info)))
    print("d info type is -->: %s" % (type(d_info)))
    print(d_info)
    F:pythonpython35python.exe E:/code/clself/Test/test_example1.py
    string info type is -->: <class 'str'>
    dict info type is -->: <class 'dict'>
    {'name': 'test', 'age': 18}
    s info type is -->: <class 'str'>
    d info type is -->: <class 'dict'>
    {'name': 'test', 'age': 18}

    使用ast.literal_eval进行转换既不存在使用json 模块进行转换的问题,也不存在使用eval模块进行转换的安全性问题,因此推荐大家使用ast.literal_eval的方法。

  • 相关阅读:
    20145324 20145325《信息安全系统设计基础》实验一 开发环境的熟悉
    20145325张梓靖 《信息安全系统设计基础》期中总结
    20145325张梓靖 《信息安全系统设计基础》第7周学习总结
    《信息安全系统设计基础》家庭作业
    20145325张梓靖 《信息安全系统设计基础》第6周学习总结
    20145325张梓靖 《信息安全系统设计基础》第5周学习总结
    openssl知识点总结
    20145307《信息安全系统设计基础》第12周学习总结
    20145315&20145307《信息安全系统设计基础》实验五
    20145307《信息安全系统设计基础》第十一周学习总结
  • 原文地址:https://www.cnblogs.com/dieyaxianju/p/8986430.html
Copyright © 2011-2022 走看看