【Python】字典dict类型转换为列表list类型

我们有时候用chrome浏览器获取Network中XHR的数据,得到的是Json类型,有时也可能是python中的字典类型,如果获取的数据比较复杂,通过简单的处理我们是无法拿到我们需要的数据的,这时我们就需要对数据进行转换处理,主要涉及到4中数据类型:str字符串,list列表,dict字典,tuple元组,或者混合类型。请参考以下案例,假设我们获取的数据是这样的(已简单处理):

class_dict = {
"total":"5",
"rows":[{"courseName":"课程1","audioname":"1.mp4","pdfFileId":"1.pdf","learnStatus":"未开始","student":"我"},{"courseName":"课程2","audioname":"2.mp4","pdfFileId":"2.pdf","learnStatus":"null","student":"我"},{"courseName":"课程3","audioname":"3.mp4","pdfFileId":"3.pdf","learnStatus":"已开始","student":"我"},{"courseName":"课程4","audioname":"4.mp4","pdfFileId":"4.pdf","learnStatus":"未开始","student":"我"},{"courseName":"课程5","audioname":"5.mp4","pdfFileId":"5.pdf","learnStatus":"已开始","student":"我"}]
}

我现在想要获取到courseName,audioname,pdfFileId,learnStatus的值,并存入到EXCEL中的4列。
我们的思路是,先将这个原始数据转换成一个二维列表[['课程1', '1.mp4', '1.pdf', '未开始'], ['课程2', '2.mp4', '2.pdf', 'null'],...]
然后将二维列表的值循环存入到EXCEL文件中。

解决这个问题前,我们先介绍一下字典的一些基础知识:

一、字典类型与json类型的区别

1.python dict 字符串可以用单引号或者双引号,json强制规定双引号。
2.python {“me”: “我”} 是合法的,json必须是 {“me”: “\u6211”} 
3.字典类型与json可以相互转换,字典转换为json:dict_json = json.dumps(dict),
  json转换为字典类型:json_dict = json.loads(json)
  
二、遍历字典的键值,得到各种数据类型

def deal_dict():class_json = json.dumps(class_dict)print("class_json为str类型:", type(class_json), class_json)print("class_dict为字典类型:", type(class_dict))# 1.遍历字典key值,value值:一般为字符串,如果字典为复杂情况,比如上面class_dict,第二个key的value为复杂情况# 这个时候会出现字符串,列表等类型for key in class_dict:print("遍历字典key+value值1:", key, class_dict[key])print("这里的键值为多种数据类型1::", type(class_dict[key]))for key in class_dict.keys():print("遍历字典key+value值2:", key, class_dict[key])for value in class_dict:print("遍历字典key+value值3:", value, class_dict[value])for key, value in class_dict.items():print("遍历字典key+value值4:", key, value)print("这里的键值为多种数据类型2:", type(value))for (key, value) in class_dict.items():print("遍历字典key+value值5:", key, value)print("这里的键值为多种数据类型3:", type(value))print(class_dict.items())print("class_dict.items()为字典_列表类型:", type(class_dict.items()))if __name__ == '__main__':deal_dict()

三、遍历字典项,得到的是元组类型

# 2.遍历字典项,得到的是元组类型for item in class_dict.items():print("遍历字典项:", item)print("这里的item为元组类型:", type(item))

四、创建一个函数得到二维列表:

def dict_to_list():class_list = []                                               #1.创建一个空的二维列表for key, value in class_dict.items():print("value的数据类型:",type(value),value)               #2.获取字典类型数据的value(dict-->str,list)for item1 in value:if isinstance(value, (list)):                         #3.过滤value中非列表类型的数据(str,list-->list)print("数据类型为字典:", type(item1), item1)       #4.获取列表中的字典数据(list-->dict)rows = []                                         #5.创建一个空的列表存放数据for info in item1:if info == 'courseName'or info == 'audioname' or info == 'pdfFileId' or info == 'learnStatus':rows.append(item1[info])                  #6.获取字典类型数据的value存入到一维列表(dict-->str-->list)if rows:                                          # 如果列表不为空class_list.append(rows)                       # 二维列表存入数据return class_listif __name__ == '__main__':#deal_dict()print(dict_to_list())

这个方法的思路是遍历字典的键值然后再处理数据:dict-->list-->dict-->str-->list
还有一种方法是遍历字典项生成元组,再处理数据:dict-->tuple-->list-->dict-->str-->list

def dict_to_list2():class_list = []                                               #1.创建一个空的二维列表for item in class_dict.items():                               #2.获取字典类型数据的字典项(dict-->tuple)a = item[1]                                               #3.获取元组的数据集合(tuple-->str,list)print("item[1]的数据类型:", type(a), a)                   #4.查看元组的数据的类型for list in a:                                            #5.分别获取元组的数据(str-->str,list-->dict)rows=[]for info in list:if info == 'courseName'or info == 'audioname' or info == 'pdfFileId' or info == 'learnStatus':rows.append(list[info])                  #6.获取字典类型数据的value存入到一维列表(dict-->str-->list)if rows:                                          # 如果列表不为空class_list.append(rows)                       # 二维列表存入数据return(class_list)if __name__ == '__main__':#deal_dict()#print(dict_to_list())print(dict_to_list2())

到这里算是得到了我们想要的数据,但是如果要存入到Excel文件,那还需要处理,下篇文章将介绍一下如何对Excel操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】xlwt和xlrd模块写入和读取.xls版本EXCEL

我们经常与EXCEL打交道,其实我们可以使用python的相应模块去处理EXCEL文件。2003以前的表格以.xls后缀,用xlwt来写表格,用xlrd来读取表格;搭配xlutils修改表格。2007的表格以.xlsx后缀,用openpyxl来读写表格。 以下是…

将json字符串转换为json对象

一般处理服务器传来的json值时,我们都会用两种方式进行处理: 1.一种为使用eval()函数。var dataObjeval("("data")");//转换为json对象(注:data为json数据); 2. 使用Function对象来进…

【Python】pymysql模块处理Mysql数据库

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装,可以直接pip安…

Django 前后台的数据传递

严正声明: 作者:psklf 出处: https://www.cnblogs.com/psklf/p/5542612.html 欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任! Django 从后台往前台传…

【Python爬虫】使用urllib.request下载已知链接的网络资源

如果有这样一个场景,我们的EXCEL某一列记录了好多(图片、视频、音频)链接A,另外一列记录了链接名称B,现在我们想要自动下载这些链接的文件,我们应该怎样处理? 1.循环去excel取值,将A和B存入到一…

echarts.js:1136 Uncaught Error: Initialize failed: invalid dom.

1、错误描述 echarts.js:1136 Uncaught Error: Initialize failed: invalid dom. 2、错误原因 <!DOCTYPE html><html><head><meta charset"UTF-8"><title></title><link rel"shortcut icon" href"../js/echar…

Fiddler在PC/台式对Android进行抓包

Fiddler是一个常用的http抓包工具&#xff0c;它能够记录电脑和移动端的进出数据&#xff0c;而且操作十分简便&#xff0c;下面主要介绍在台式机上Fiddler如何对Android进行数据抓包&#xff0c;本人使用的Fiddler版本为v5.0&#xff0c;文章主要知识点如下&#xff1a; 1.手机…

Echars折线配置详解

Echars折线配置详解 比如做成如下效果图&#xff1a; 所有的配置如下&#xff1a; var option {tooltip: { // 提示框trigger: axis, // 触发类型(坐标轴触发)alwaysShowContent: false, // 是否永远显示提示框的内容backgroundColor: rgba(32, 174, 252, 0.7), // 提示框…

【Python爬虫】爬取微信公众号文章信息准备工作

有一天发现我关注了好多微信公众号&#xff0c;那时就想有没有什么办法能够将微信公众号的文章弄下来&#xff0c;而且还想将一些文章的精彩评论一起搞下来。参考了一些文章&#xff0c;通过几天的研究基本上实现了自己的要求&#xff0c;现在记录一下自己的一些心得。 整个研…

js:堆栈和队列

JavaScript数组的栈和队列的操作方法。 堆栈和队列 要了解JavaScript数组的堆栈和队列方法的操作&#xff0c;需要先对堆栈和队列基础知识有所了解。在继续后面的内容之前&#xff0c;我们先简单的了解一下堆栈和队列的概念。 栈和队列都是动态的集合&#xff0c;在栈中&…

【Python爬虫】微信公众号历史文章和文章评论API分析

上一篇文章爬取微信公众号文章信息准备工作介绍了微信公众号历史文章和文章评论API的组成情况&#xff0c;历史文章API格式&#xff1a;https://mp.weixin.qq.com/mp/profile_ext?actiongetmsg&__bizMjM5NjAxOTU4MA&fjson&offset10&count10&is_ok1&sc…

MySql的Delete、Truncate、Drop分析

MySql的Delete、Truncate、Drop分析 相同点&#xff1a; truncate 和不带 where 子句的 delete&#xff0c;以及 drop 都会删除表内的数据 不同点:  1. truncate 和 delete 只删除数据不删除表的结构(定义)   drop 语句将删除表的结构被依赖的约束(constrain)、触发器(…

【Python】Python简介和Python解释器

计算机语言的种类非常的多&#xff0c;总的来说可以分成机器语言&#xff0c;汇编语言&#xff0c;高级语言三大类。 机器语言(二进制)→汇编语言→&#xff08;前面两种语言是与硬件进行交互&#xff09; →高级语言&#xff08;面向过程语言(C语言)→面向对象语言&#xff09…

python 判断当前时间是否为零点

import time time_now int(time.time()) #unix时间time_local time.localtime(time_now) #转换为win_timedt time.strftime("%H:%M:%S", time_local)# 转换成新的时间格式(18:59:20)adt.split(:)b[]for a in dt.split(:):b.append(a)c.join(b)if c000000:print(是…

多任务场景下单线程异步多线程多进程

多任务的场景&#xff1a;1.爬取不同url的内容&#xff0c;爬取同一个url分页内容。比如&#xff1a;豆瓣图书 Top 250 https://book.douban.com/top250?start0 实现豆瓣图书Top250的抓取工作&#xff0c;并存入excel中&#xff0c;如果采用的串行爬取方式&#xff0c;每次爬完…

django 按天水平分表并插入数据

db pymysql.connect("localhost", "数据库管理员名", "数据库密码", "数据库名")cursor db.cursor()unix_time str(int(time.time()))win_time datetime.datetime.now().strftime(%Y%m%d)table_name engineeringdata win_timesq…

【Python】单线程异步多线程多进程实例

上一篇文章主要介绍了多任务场景下单线程异步、多线程、多进程如何选择&#xff0c;链接&#xff1a;多任务场景下单线程异步多线程多进程 这里主要通过三个实例去验证一下简单的多任务场景下&#xff0c;三种方式的耗时情况&#xff0c;假设有10个互不关联的10个任务 多进程版…

python及pycharm2018软件安装教程

python及pycharm2018软件安装教程 python 3.6.5及pycharm2018.1.1 Win版32/64位下载地址&#xff1a; https://pan.baidu.com/s/1KdECgnrARK4HubPeFSKCTw 密码&#xff1a;bwc5 Python及PyCharm简介&#xff1a; Python 是一种面向对象的解释型计算机程序设计语言。是纯粹的自由…

【Python爬虫】requests与urllib库的区别

我们在使用python爬虫时&#xff0c;需要模拟发起网络请求&#xff0c;主要用到的库有requests库和python内置的urllib库&#xff0c;一般建议使用requests&#xff0c;它是对urllib的再次封装&#xff0c;它们使用的主要区别&#xff1a; requests可以直接构建常用的get和post…

2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题解决

使用navicat 连接 mysql 8.0.11 报 "2059 - authentication plugin caching_sha2_password ..." 解决办法&#xff1a; 进入mysql命令行然后输入 ALTER USER root% IDENTIFIED WITH mysql_native_password BY root1;