python groupby用法_Python 标准库实践之合并字典组成的列表
作者 | 陈祥安
来源 | Python学习开发
最近做了个数据合并的需求这里记录下:
要求如下:
dict_of_list1 = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 20}]dict_of_list2 = [{"name": "zhangsan", "province": "shandong"}, {"name": "lisi", "province": "changsha"}, {"name": "xiaohong", "province": "guangxi"}, {"name": "wangwu", "province": "xizang"}]
将上面的两个列表的字典进行合并将名字一样的项目放在一起。
形如:
[{"name":"zhangsan","age":18,"province":"shandong"},{"name":"xiaohong","province":"guangxi"}]
传统解法
dict_of_list1 = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 20}]dict_of_list2 = [{"name": "zhangsan", "province": "shandong"}, {"name": "lisi", "province": "changsha"}, {"name": "xiaohong", "province": "guangxi"}, {"name": "wangwu", "province": "xizang"}]all_data = dict_of_list1 + dict_of_list2d = {}for item in all_data: name = item["name"] if name in d: d[name].update(item) else: d[name] = itemresult = []for k,v in d.items(): result.append(v)sorted(v)print(result)
根据要求得知,我们需要根据姓名一样的进行合并,那么可以创建一个新的字典可以把姓名当作字典的键,然后判断这个键是否在这个字典中,如果不存在就是赋值,否则去更新其值。因为它的值是字典类型所以可以通过update进行更新,这种方法可以适用到其他语言。
下面再来一个python独有的解法。
通过分组函数
利用python标准库
from operator import itemgetterfrom itertools import groupbyfrom collections import ChainMapdict_of_list1 = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 20}]dict_of_list2 = [{"name": "zhangsan", "province": "shandong"}, {"name": "lisi", "province": "changsha"}, {"name": "xiaohong", "province": "guangxi"}, {"name": "wangwu", "province": "xizang"}]key = itemgetter("name")all_data = dict_of_list1 + dict_of_list2all_data.sort(key=key)result_list = []for x, y in groupby(all_data, key=key): d = dict(ChainMap(*y)) result_list.append(d)sorted(result_list, key=key)print(result_list)
我们可以使用itertools模块的groupby按照name进行分组
groupby有两个参数第一个是一个可迭代对象,第二个是指定按照什么去分组,类似我们排序时指定key的值,
这里key的值可以使用lambda表达式,或者使用标准库operator的itemgetter方法,实现相同的效果。
使用这个方法有一个要求那就是,需要提前对可迭代对象进行排序。
经过groupby修饰之后我们得到一个key和itertools._grouper对象,key就是我们指定那个键的值,这里就是name的值,然后可以对itertools._grouper对象进行拆分,得到几个字典,再通过collections的ChainMap对
其元素进行字典合并,之后转为dict对象。最终加入到指定列表完成我们的任务。
该方法主要是熟悉Python一些比较实用的标准库的用法。
python groupby用法_Python 标准库实践之合并字典组成的列表相关推荐
- python字符串库函数_Python标准库概览(1):string
Python的 string 标准库保留了一些有用的函数和用于处理文本对象的类,现在我们来一起看一下Python的string标准库还有哪些我们不知道的有趣用法? 01.capwords()函数:将字 ...
- print python 带回车_python标准库threading源码解读【二】
紧接着上一篇文章继续解析源码 甘蔗:python标准库threading源码解读[一]zhuanlan.zhihu.com 目录 Event的介绍和用法 Event源码解析 以后的内容尽量少一点并且 ...
- python文件管理包_Python标准库04 文件管理 (部分os包,shutil包)
Python标准库04 文件管理 (部分os包,shutil包) 在操作系统下,用户可以通过操作系统的命令来管理文件,参考.Python 标准库则允许我们从 Python 内部管理文件.相同的目的,我 ...
- python itertools模块_Python标准库:itertools模块
来源:j_hao104 简介 官方描述:Functional tools for creating and using iterators.即用于创建高效迭代器的函数. itertools.chain ...
- python计算平均数_Python标准库——数学运算
平均值 statistics模块实现了很多常用的统计公式,允许使用Python的各种数值类型(int.float.Decimal和Fraction)来完成高效计算. 共支持3种形式的平均值:均值(me ...
- python指数运算_Python标准库——数学运算
指数和对数 指数生长曲线在经济学.物理学和其他学科中经常出现.Python有一个内置的幂运算符("**"),不过,如果需要将一个可调用函数作为另一个函数的参数,那么困难需要用到po ...
- python configparser模块_Python标准库之ConfigParser模块
ConfigParser模块用于生成和修改常见配置文档. 比如配置文件格式如下: [DEFAULT] ServerAliveInterval= 45Compression=yes Compressio ...
- python随机库函数_python标准库中的随机分布函数
random.random() 返回一个 随机的浮点数, 值域为 [0.0, 1.0] random.uniform(a, b) 均匀分布 返回一个随机的浮点数N, N的值在a与b之间 等同于 a + ...
- python标准类型内建函数_Python 标准库系列之内建函数
Python的强大有很大一部分是因为其庞大的标准库提供了各式各样的功能,基本上日常使用中你所需要的功能都可以从中找到,从而大大减轻开发人员的压力,节省开发人员的时间,因此,要想更好的使用python, ...
最新文章
- The Swift Code之UITextField的使用,及事件委托
- C#多线程编程介绍——使用thread、threadpool、timer
- Fiddler插件开发 - 实现网站离线浏览功能
- 字符串字符和数字分割
- JavaSE——常用类库(下)(Date、DateFormat、Calendar、System类)
- 数字图像处理:图像平均/加法_OPT小讲堂 ∣ SciSmart图像增强之二值化
- 信息学奥赛一本通(1005:地球人口承载力估计)
- 不能忽视 php warning
- Spring-web源码解析之HttpRequestHandler
- Toggle和Slider组件
- 关于微信开放平台配置-网站应用
- ListView实现物流追踪
- 与你的梦,种植于青山绿水间
- 【原创】图像处理第5弹:面部表情识别--微笑
- 扫描转换html,html+css实现图片扫描仪特效
- tl wn322g linux驱动下载,TL-WN322G+驱动
- ASEMI整流桥GBP406~GBP410,GBP406参数,GBP410图片
- 纽约大学坦登学院计算机专业,纽约大学坦登工程学院
- Facebook营销进阶技巧有哪些
- CHIL-SQL-语法
热门文章
- 编程范式之栈的抽象操作
- python编程(windows平台)
- C语言和设计模式(外观模式)
- android 蓝牙连接obd,Android蓝牙连接汽车OBD设备
- python输出文档内容_python输出文件
- java怎么修改订单状态_在WooCommerce中自定义订单状态更改时发送电子邮件通知
- android textview 动态高度自适应,TextView自适应高度(解决_UITextContainerView布局问题)...
- java jdbc 详解_JDBC详解
- 什么相片可以两张弄成一张_怎么将两张图片合成一张?
- 以太坊ETH不能转账,状态一直是pending状态原因和解决方法