Python 如何将字符串转为字典

2023-11-15

在工作中遇到一个小问题,需要将一个 python 的字符串转为字典,比如字符串:

user_info = '{"name" : "john", "gender" : "male", "age": 28}'

我们想把它转为下面的字典:

user_dict = {"name" : "john", "gender" : "male", "age": 28}

有以下几种方法:

1、通过 json 来转换

import json
user_info= ‘{“name” : “john”, “gender” : “male”, “age”: 28}’
user_dict = json.loads(user_info)
user_dict
{u’gender’: u’male’, u’age’: 28, u’name’: u’john’}
但是使用 json 进行转换存在一个潜在的问题。

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

import json
user_info = “{‘name’ : ‘john’, ‘gender’ : ‘male’, ‘age’: 28}”

由于字符串使用单引号,会导致运行出错

user_dict = json.loads(user_info)
Traceback (most recent call last):
File “”, line 1, in
File “/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py”, line 339, in loads
return _default_decoder.decode(s)
File “/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py”, line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File “/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py”, line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)

2、通过 eval

user_info = ‘{“name” : “john”, “gender” : “male”, “age”: 28}’
user_dict = eval(user_info)
user_dict
{‘gender’: ‘male’, ‘age’: 28, ‘name’: ‘john’}

user_info = “{‘name’ : ‘john’, ‘gender’ : ‘male’, ‘age’: 28}”
user_dict = eval(user_info)
user_dict
{‘gender’: ‘male’, ‘age’: 28, ‘name’: ‘john’}

通过 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)

3、通过 literal_eval

import ast
user = ‘{“name” : “john”, “gender” : “male”, “age”: 28}’
user_dict = ast.literal_eval(user)
user_dict
{‘gender’: ‘male’, ‘age’: 28, ‘name’: ‘john’}
user_info = “{‘name’ : ‘john’, ‘gender’ : ‘male’, ‘age’: 28}”

user_dict = ast.literal_eval(user)
user_dict
{‘gender’: ‘male’, ‘age’: 28, ‘name’: ‘john’}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 如何将字符串转为字典 的相关文章

  • 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

    我在 Cloud9 中使用 Python AWS CDK 并且我部署简单的 Lambda 函数那应该是发送 API 请求到 Atlassian 的 API当对象上传到 S3 存储桶时 也是由 CDK 创建的 这是我的 CDK 堆栈代码 fr
  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • 如何正确地将 MIDI 刻度转换为毫秒?

    我正在尝试将 MIDI 刻度 增量时间转换为毫秒 并且已经找到了一些有用的资源 MIDI Delta 时间刻度到秒 http www lastrayofhope co uk 2009 12 23 midi delta time ticks
  • 在 Tensorflow tf.nn.nce_loss 中出现 TypeError:'Mul' Op 的输入 'y' 的类型为 float32,与参数 'x' 的 int32 类型不匹配

    我正在研究 Tensor Flow 中的 Bag of Words 实现 并得到了 类型错误 Mul Op 的输入 y 的类型为 float32 与参数 x 的 int32 类型不匹配 在 tf nn nce loss 中 我尝试查看 tf
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 以同步方式使用 FastAPI,如何获取 POST 请求的原始正文?

    在中使用 FastAPIsync not async模式 我希望能够接收 POST 请求的原始 未更改的正文 我能找到的所有例子都显示async代码 当我以正常同步方式尝试时 request body 显示为协程对象 当我通过发布一些内容来
  • 使用 Python pandas 计算调整后的成本基础(股票买入/卖出的投资组合分析)

    我正在尝试对我的交易进行投资组合分析 并尝试计算调整后的成本基础价格 我几乎尝试了一切 但似乎没有任何效果 我能够计算调整后的数量 但无法获得调整后的购买价格有人可以帮忙吗 这是示例交易日志原始数据 import pandas as pd
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • Python 将日志滚动到变量

    我有一个使用多线程并在服务器后台运行的应用程序 为了无需登录服务器即可监控应用程序 我决定包括Bottle http bottlepy org为了响应一些HTTP端点并报告状态 执行远程关闭等 我还想添加一种查阅日志文件的方法 我可以使用以
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 您可以将操作直接应用于map/reduce/filter 中的参数吗?

    map and filter通常可以与列表理解互换 但是reduce并不那么容易被交换map and filter 此外 在某些情况下我仍然更喜欢函数语法 但是 当您需要对参数本身进行操作时 我发现自己正在经历语法体操 最终必须编写整个函数
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1

随机推荐

  • go-zero&go web集成JWT和cobra命令行工具实战

    前言 上一篇 从零开始基于go zero的go web项目实战 01项目初始化 从零开始基于go zero搭建go web项目实战 02集成JWT和cobra命令行工具 源码仓库地址 源码 https gitee com li zheng
  • 微信小程序介绍

    目录 1 什么是小程序 2 小程序可以干什么 2 1 相关资料 2 2 申请微信小程序测试账号 3 开发一个demo 3 1 创建项目 3 2 配置 3 3 常用框架 3 4 目录结构说明 目录结构 小程序代码构成 JSON 配置 小程序配
  • el-table 列里面嵌套 el-table

    一 达到的效果如下图 二 实现流程 2
  • 强大而精致的机器学习调参方法:贝叶斯优化

    一 简介 贝叶斯优化用于机器学习调参由J Snoek 2012 提出 主要思想是 给定优化的目标函数 广义的函数 只需指定输入和输出即可 无需知道内部结构以及数学性质 通过不断地添加样本点来更新目标函数的后验分布 高斯过程 直到后验分布基本
  • spring boot之actuator健康检查

    什么是actuator SpringBoot自带监控功能Actuator 可以帮助实现对程序内部运行情况监控 比如监控状况 Bean加载情况 环境变量 日志信息 线程信息等 官翻文档 https blog csdn net alinyua
  • java实体类相互转换

    工具类 public class SmartBeanUtil 复制bean的属性 param source 源 要复制的对象 param target 目标 复制到此对象 public static void copyProperties
  • dataframe多种更改数据的方法

    以下是测试的数据 import pandas as pd data name Alice Bob Cindy David age 25 23 28 24 gender woman man woman man df pd DataFrame
  • 人工智能目标检测数据集:飞机(3)

    本数据集为飞机卫星图 包括J用 民用 以及通用飞机 图片数量1000张 图片尺寸为1024x1024 RGB彩图 仅包含一类目标 飞机 数据集已经打好标签 标签格式为常用的pascal voc格式 xml 可以直接用于目标检测模型的训练 Y
  • 如何快速求最大公约数和最小公倍数

    可以运用辗转相除法 即 326 78 78 326 78 78 14 14 78 14 14 8 8 14 8 8 6 6 8 6 6 2 2 6 2 0 此时结束 这个时候2就是最大公约数 所用原理是 1 a b a ka b 其中a b
  • 正则表达式函数

    匹配函数 match函数是从头开始匹配 如果刚开始匹配不成 就无法再进行匹配了 import re result re match r a zA Z 大Abc print result 输出结果 None search函数 只要字符串中有满
  • vue和ajax

    常用发送ajax的方法 xhr jQury get post axios fetch window内置 promise风格 会把返回数据包两层promise 而且兼容不好 v resouce server1 js const express
  • java获取文件夹下所有图片_【windows技巧】快速获取文件夹内所有文件名称列表...

    转自 百度经验 https jingyan baidu com article 3aed632e3917c870108091d1 html 1 打开一个文件夹 gt 2 新建一个TXT文档 将名字命名为 文档列表 gt 3 在TXT文档里输
  • c++什么时候生成默认拷贝构造函数

    需要默认拷贝构造函数原因 如果不提供默认拷贝构造函数 编译器会按照位拷贝进行拷贝 位拷贝指的是按字节进行拷贝 有些时候位拷贝出现的不是我们预期的行为 会取消一些特性 以下是需要默认拷贝构造函数的必要条件 1 类成员也是一个类 该成员类有拷贝
  • 如何实现无线网卡上外网+有线上内网=同时上网

    网上那些花里胡哨的 一顿操作然并卵 已补充成功操作详情 请翻到最后面查看 前面内容请忽视 至少我现在根本实现不了 但是会比拔插网线换来换去方便些 记录下 需要的自取 实例 一 开始 1 管理员打开cmd命令 2 route print 查看
  • chatgpt赋能python:怎么让Python执行完不关闭的SEO

    怎么让Python执行完不关闭的SEO 作为一名有十年Python编程经验的工程师 我深知Python在SEO技术中的重要性 然而 很多人可能不知道如何让Python执行完任务后不关闭 这将会影响我们的SEO效果 因此 在这篇文章中 我将向
  • xlwt:ValueError: column index (256) not an int in range(256)

    xlwt最大列只支持255列 超过范围会报错 可以考虑用xlsxwriter
  • 安卓已死?毕业一年萌新的Android大厂面经,年薪超过80万!

    前言 最近我一直在面试高级工程师 不管初级 高级 程序员 我想面试前 大家刷题一定是是少不了吧 我也一样 我在网上找了很多面试题来看 最近又赶上跳槽的高峰期 好多粉丝 都问我要有没有最新面试题 索性 我就把我看过的和我面试中的真题 及答案都
  • layer.msg 的time 时间停留问题

    layer msg 同上 icon 1 time 2000 2秒关闭 如果不配置 默认是3秒 function do something time 属性为弹框停留时间 单位为毫秒 tipsMore 属性为是否同时显示多个弹框 true为显示
  • 顺序表与数组

    顺序表是在计算机内存中以数组的形式保存的线性表 顺序表是指用一组地址连续的存储单元依次存储数据元素的线性结构 线性表采用顺序存储的方式存储就称之为顺序表 顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中 线性表采用指针链接
  • Python 如何将字符串转为字典

    在工作中遇到一个小问题 需要将一个 python 的字符串转为字典 比如字符串 user info name john gender male age 28 我们想把它转为下面的字典 user dict name john gender m