博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】字典dict类型转换为列表list类型
阅读量:4099 次
发布时间:2019-05-25

本文共 4512 字,大约阅读时间需要 15 分钟。

我们有时候用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://frgii.baihongyu.com/

你可能感兴趣的文章
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python猜拳游戏
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
python九九乘法表(详解)
查看>>
ESP8266 WIFI数传 Pixhaw折腾笔记
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
element ui 弹窗在IE11中关闭时闪现问题修复
查看>>
vue 遍历对象并动态绑定在下拉列表中
查看>>
Vue动态生成el-checkbox点击无法选中的解决方法
查看>>
python __future__
查看>>
MySQL Tricks1
查看>>
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(二)
查看>>
pytorch(三)
查看>>
pytorch(四)
查看>>
pytorch(5)
查看>>