zoukankan      html  css  js  c++  java
  • python基础面试题之类型转换(字典篇)

    问 如何将一个字典字符串转换成字典;

    user_info='{"name" : "rianley", "gender" : "male", "age": 18}'

    最简单的方式;用json转换一下呗;代码如下;

    >>> import json
    >>> user_info= '{"name" : "rianley", "gender" : "male", "age": 18}'
    >>> user_dict = json.loads(user_info)

    但是使用 json 进行转换存在一个潜在的问题。

    由于 json 语法规定 数组或对象之中的字符串必须使用双引号,不能使用单引号 (官网上有一段描述是 “A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes” ),因此下面的转换是错误的:

    就是 类似于下面的dict字符串转换是会出现错误的

    user_info="{'name' : 'rianley', 'gender' : 'male', 'age': 18}"

    通过 eval

    >>> user_info = '{"name" : "rianley", "gender" : "male", "age": 18}'
    >>> user_dict = eval(user_info)
    >>> user_dict
    {'gender': 'male', 'age': 18, 'name': 'rianley'}
    >>> user_info = "{'name' : 'rianley', 'gender' : 'male', 'age': 18}"
    >>> user_dict = eval(user_info)
    >>> user_dict
    {'gender': 'male', 'age': 18, 'name': 'rianley'}

    通过 eval 进行转换就不存在上面使用 json 进行转换的问题。但是,使用 eval 却存在安全性的问题,比如下面的例子:

    # 让用户输入 `user_info`
    >>> user_info = raw_input('input user info: ')
    # 输入 {"name" : "john", "gender" : "male", "age": 28},没问题
    >>> user_dict = eval(user_info)
    # 输入 __import__('os').system('dir'),user_dict 会列出当前的目录文件!
    # 再输入一些删除命令,则可以把整个目录清空了!
    >>> user_dict = eval(user_info)

    通过 ast库中的literal_eval函数

    >>> import ast
    >>> user = '{"name" : "rianley", "gender" : "male", "age": 18}'
    >>> user_dict = ast.literal_eval(user)
    >>> user_dict
    {'gender': 'male', 'age': 28, 'name': 'john'}
    user_info = "{'name' : 'rianley', 'gender' : 'male', 'age': 18}"
    >>> user_dict = ast.literal_eval(user)
    >>> user_dict
    {'gender': 'male', 'age': 18, 'name': 'rianley'}
    

      

    使用 ast.literal_eval 进行转换既不存在使用 json 进行转换的问题,也不存在使用 eval 进行转换的 安全性问题,因此推荐使用 ast.literal_eval

    每天记录一个小知识.....

  • 相关阅读:
    如何用代码来修改目录的权限
    php广告显示设置存放记录的目录代码
    本函数用来改变目前 php 执行的目录到新的 directory 目录中
    for循环的时候是按照数字递增会造成一些元素被遗漏
    php常用的对字符串进行加密的算法
    关于如何用php 获取当前脚本的url
    将正确的 HTTP 头转发给后端服务器的一些问题
    应用服务器上部署自己的 blog 和 wiki 组件。
    PHP统计字符串里单词查询关键字
    (在线工具)JSON字符串转换成Java实体类(POJO)
  • 原文地址:https://www.cnblogs.com/rianley/p/14888296.html
Copyright © 2011-2022 走看看