玩转python字典与列表(下)
本文首发于知乎
本文分为如下部分
- 列表转置
- 字典转置
- 字典列表之间的转换
- 总结
列表转置
已有
l = [['a', 'b', 'c'],[1, 2, 3]]
复制代码
想得到
[('a', 1), ('b', 2), ('c', 3)]
复制代码
代码如下
[z for z in zip(*l)]
复制代码
zip
函数在list的转置中充当重要作用,它的基础用法是这样的
for z in zip(['a', 'b', 'c'], [1, 2, 3]):print(z)# 输出
('a', 1)
('b', 2)
('c', 3)
复制代码
字典的转置
已有
m = {'Bob': {'age': 30, 'country': 'America'},'Mary': {'age': 20, 'country': 'China'},'Frank': {'age': 25, 'country': 'America'}}
复制代码
想得到
{'age': {'Bob': 30, 'Frank': 25, 'Mary': 20},'country': {'Bob': 'America', 'Frank': 'America', 'Mary': 'China'}}
复制代码
如果借用pandas直接转置即可
>>> m = {'Bob': {'age': 30, 'country': 'America'},
... 'Mary': {'age': 20, 'country': 'China'},
... 'Frank': {'age': 25, 'country': 'America'}}
>>>
>>> import pandas as pd
>>> pd.DataFrame(m)Bob Frank Mary
age 30 25 20
country America America China
>>> pd.DataFrame(m).transpose()age country
Bob 30 America
Frank 25 America
Mary 20 China
>>> pd.DataFrame(m).transpose().to_dict()
{'age': {'Mary': 20, 'Bob': 30, 'Frank': 25}, 'country': {'Mary': 'China', 'Bob': 'America', 'Frank': 'America'}}
复制代码
如果我们单独使用字典的知识也是可以办到的
from collections import defaultdict
result = defaultdict(dict)
for names, infos in m.items():for k, v in infos.items():result[k].update({names: v})dict(result)
复制代码
字典列表之间的转换
已有
d = {'name': ['a', 'b', 'c'],'num': [1, 2, 3]}
复制代码
想要得到
[('a', 1), ('b', 2), ('c', 3)][{'name': 'a', 'num': 1}, {'name': 'b', 'num': 2},{'name': 'c', 'num': 3}]
复制代码
两种形式
代码如下
# 第一个
[z for z in zip(*d.values())]# 第二个
[dict(zip(d.keys(), z)) for z in zip(*d.values())]
# 或
[dict(zip(d, z)) for z in zip(*d.values())]
复制代码
总结
首先来看一下我们遇到了哪些形式的数据
{'name' : ['a', 'b', 'c'],'num' : [1, 2, 3]}{'Bob': {'age': 30, 'country': 'America'},'Mary': {'age': 20, 'country': 'China'},'Frank': {'age': 25, 'country': 'America'}}{'age': {'Bob': 30, 'Frank': 25, 'Mary': 20},'country': {'Bob': 'America', 'Frank': 'America', 'Mary': 'China'}}[('a', 1), ('b', 2), ('c', 3)]
[{'a', 1}, {'b', 2}, {'c', 3}]
[{'a': 1}, {'b': 2}, {'c': 3}]
[{'name': 'Bob', 'age': 30, 'country': 'America'},{'name': 'Mary', 'age': 20, 'country': 'China'},{'name': 'Frank', 'age': 25, 'country': 'America'}]
复制代码
下面总结一下看待字典列表的思想
- 首先,最重要的是列表这种结构,将集合、元组都看做列表(无序等都是细枝末节)
- 而字典可以看做特殊的列表,即对每个元素都命名了的列表,键是名,值相当于列表的元素
读者可以试着使用这种思想去看上面这些数据,就会明白,为什么某些数据直接可以用pd.DataFrame
转化为数据框,他们都相当于二维列表形成的矩阵。一个维度,如果以列表形式呈现则视为行,如果以字典形式呈现则视为列。
这些数据的相互转化中,只要根据要生成结果的形式,记住几个套路即可:
1.如果结果是一个字典,简单的用字典生成式等方式不谈。当值是动态更新的时候,则使用collections
模块中的defaultdict
设置值的类型,使用循环填入数据,如果值类型是list则用append
方法填入,如果是dict则用update
方法填入。
注:有时结果是字典会直接人为指定键,值用列表生成式等直接获得,这是一种比较不通用的做法,因为需要人为指定键的话,就无法将其改装为一个适合各种情况的函数了。
2.如果结果是一个列表,则用列表生成式,构造每一个元素的形式即可
3.如果涉及到了转置问题,其实本质上都是列表的转置,往zip
函数那里想,有时也可以用defaultdict
欢迎关注我的知乎专栏
专栏主页:python编程
专栏目录:目录
版本说明:软件及包版本说明
玩转python字典与列表(下)相关推荐
- python读取json格式文件大量数据,以及python字典和列表嵌套用法详解
1.Python读取JSON报错:JSONDecodeError:Extra data:line 2 column 1 错误原因: JSON数据中数据存在多行,在读取数据时,不能够单单用open(), ...
- python 字典、列表、字符串 之间的转换
文章目录 列表与字符串转换 列表转字符串: 将列表中的内容拼接成一个字符串 将列表中的值转成字符串 字符串转列表: 将字符串每个字符转成列表中的值 将字符串按分割成列表 列表与字典转换 列表转字典: ...
- python字典嵌套列表怎么访问值的某个元素_通过键列表访问嵌套字典项?
使用reduce()翻阅字典:from functools import reduce # forward compatibility for Python 3import operatordef ...
- python字典添加列表_【Python】对字典列表进行去重追加
[TOC] 目标 现有字典列表 # A = [ {dict1}, {dict2} ] B = [ {dict3}, {dict2} ] C = [ {dict3}, {dict4} ] M = [A, ...
- python字典转换为列表_Python中将字典转换为列表的方法
说明:列表不可以转换为字典 ①转换后的列表为无序列表 a = {'a' : 1, 'b': 2, 'c' : 3} #字典中的key转换为列表 key_value = list(a.keys()) p ...
- python 字典、列表、字符串 之间的相互转换
1.列表与字符串转换 列表转字符串: 将列表中的内容拼接成一个字符串 将列表中的值转成字符串 字符串转列表: 用eval转换 将字符串每个字符转成列表中的值 将字符串按分割成列表 2.列表与字典转换 ...
- python pop函数 索引_[python] 字典和列表中的pop()函数
在字典和列表中,pop()函数都是删除特定元素,并将删除的元素返回给指定的变量或丢弃 一.字典元素删除 1.1 clear() 语法:dict.clear() 1 x = {'a':1, 'b':2, ...
- python字典、列表、元祖使用场景_(三)PYTHON字典 元祖 列表尝试应用
1. 使用 join 方法将下划线添加到列表的每一个元素拼接成字符串,li = ['alex', 'eric', 'rain'] li = ['boom', 'TNT', 'zhadan'] dayi ...
- python字典、列表、元祖使用场景_python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍...
python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 元祖跟列表类似.只不过是有区别的. 如下: tuple(元祖英文) 跟列表类似, 元素不能 ...
最新文章
- 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence
- mysql表自关联_数据库之自关联
- Mac系统git clone 慢【解决方案】
- 农保和社保的区别有哪些
- 写在前面,白话 Yaf 探秘与深入
- 如何使用SAP Fiori Launchpad Designer
- 03:数据结构 栈、队列、链表与数组
- document.elementFromPoint
- 2021牛客暑期多校训练营6 :D Gambling Monster 期望dp + fwt + cdq分治
- 查看mysql表的数据和结构
- 高德车道级导航已上线8城 新增支持小米11 Pro
- Android 使用 Gradle 打包 - 签名配置
- Android进阶(二) Activity调用Service 通过AIDL实现
- Tapestry5.3使用总结
- 模拟电子技术基础简明课程(第三版)思维导图
- 易用宝项目记录day5-shiro
- 整理:Github上最受欢迎的仓库(截至2021年12月26日)
- 快速部署支持 Makedown 和 LaTeX 等格式的 Zbox-Wiki 文档共享站点
- 【Docker】No defult Boot2Docer ISO异常
- 绿色建筑、装配式建筑工作加速推进,建筑行业招聘需求急速飞升