【Python Cookbook】S01E12 根据字段将记录分组

目录

  • 问题
  • 解决方案
  • 讨论

问题

如果有一系列的字典或对象实例,我们想根据某个特定的字段来分组迭代数据。

解决方案

假设有如下字典列表:

rows = [{'address': '5412 N CLARK', 'date': '07/01/2012'},{'address': '5148 N CLARK', 'date': '07/04/2012'},{'address': '5800 E 58TH', 'date': '07/02/2012'},{'address': '2122 N CLARK', 'date': '07/03/2012'},{'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},{'address': '1060 W ADDISON', 'date': '07/02/2012'},{'address': '4801 N BROADWAY', 'date': '07/01/2012'},{'address': '1039 W GRANVILLE', 'date': '07/04/2012'}
]

在对上述数据进行分组时,使用 itertools.groupby() 函数非常有用。
假设我们想以日期为分组的方式迭代显示数据,首先通过 operator.itemgetter() 函数进行排序,然后通过 itertools.groupby() 进行分组。

from operator import itemgetter
from itertools import groupbyrows.sort(key=itemgetter('date'))
for date, items in groupby(rows, key=itemgetter('date')):print(date)for i in items:print(' ', i)

产生结果如下:

在这里插入图片描述

讨论

函数 groupby() 通过扫描序列对相同值或者 key 指定的值进行分组。原理上,groupby() 创建了一个迭代器,每次迭代时返回一个值以及一个子迭代器,这个子迭代器会产生所有在该分组内具有该值的项。

需要注意的是,必须首先对字段根据需求进行排序,因为 groupby() 只能检查连续的项,不首先排序的话,将无法按照要求的方式进行分组。而反过来讲,如果只需要简单的按照日期将数据进行分组,那么使用 defaultdict() 即可:

from collections import defaultdictrows_by_date = defaultdict(list)
for row in rows:rows_by_date[row['date']].append(row)print(rows_by_date)

结果:

defaultdict(<class 'list'>, {
'07/01/2012': [{'address': '5412 N CLARK', 'date': '07/01/2012'}, {'address': '4801 N BROADWAY', 'date': '07/01/2012'}], 
'07/04/2012': [{'address': '5148 N CLARK', 'date': '07/04/2012'}, {'address': '1039 W GRANVILLE', 'date': '07/04/2012'}], 
'07/02/2012': [{'address': '5800 E 58TH', 'date': '07/02/2012'}, {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'}, {'address': '1060 W ADDISON', 'date': '07/02/2012'}], 
'07/03/2012': [{'address': '2122 N CLARK', 'date': '07/03/2012'}]})

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

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

相关文章

W25Q64CV SPI Flash Memory

SPI简介 SPI是一种同步串行通信接口规范&#xff0c;用于短距离通信&#xff0c;主要应用于嵌入式系统。SPI通信由一个主设备和一个或多个从设备组成&#xff0c;其中主设备生成时钟信号并控制通信的开始和结束。 SPI通信的基本组成 四个基本信号 SCK (Serial Clock) - 时钟…

centos7下安装MySQL,Oracle数据库

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 操作系统版本为CentOS 7 使⽤ MySQ…

python数据分析——datetime数据类型2

参考资料&#xff1a;活用pandas库 # 导入pandas库 import pandas as pd # 加载数据集 teslapd.read_csv(r"...\data\tesla_stock_yahoo.csv") # 查看数据 print(tesla.head()) 1、基于日期取数据子集 # 将Date数据列转换为datetime类型 tesla[Date]pd.to_datetime…

学习笔记——网络参考模型——TCP/IP模型(传输层)

四、TCP/IP模型-传输层 一、TCP 1、TCP定义 TCP(Transmission Control Protocol&#xff0c;传输控制协议)∶为应用程序提供可靠的面向连接的通信服务。目前&#xff0c;许多流行的应用程序都使用TCP。 连接&#xff1a;正式发送数据之前&#xff0c;提前建立好一种虚拟的&…

oracle服务器存储过程中调用http

在Oracle服务器中&#xff0c;存储过程调用HTTP请求可以通过几种不同的方法来实现。以下是一些关键步骤和注意事项&#xff0c;以帮助你清晰地理解和执行此操作&#xff1a; 开启Oracle ACL权限&#xff1a; 使用dbms_network_acl_admin包来创建和管理访问控制列表&#xff0…

ES6-03-模版字符串、对象的简化写法

一、模版字符串 1-1、声明 反引号。 1-2、特性 1、字符串内容可以直接换行 得用号连接 2、变量拼接 现在&#xff1a; 二、对象的简化写法 ES6允许在大括号里面&#xff0c;直接写入变量和函数&#xff0c;作为对象的属性和方法。 let name milk;let chage function(){con…

iOS ActivityViewController使用

UIActivityViewController是iOS中用于展示一个活动列表的视图控制器&#xff0c;允许用户通过各种内置或第三方的应用来分享内容。以下是使用UIActivityViewController分享文本内容的示例代码&#xff1a; import UIKit class ViewController: UIViewController { IBA…

java-对象内存

在Java中&#xff0c;对象内存是指用于存储对象实例的内存区域。当我们在Java程序中创建一个对象时&#xff0c;Java虚拟机&#xff08;JVM&#xff09;会在内存中为该对象分配一块内存区域&#xff0c;用于存储对象的字段&#xff08;成员变量&#xff09;、方法和其他与对象相…

通过电脑查看Wi-Fi密码的方法,提供三种方式

式一&#xff1a; 右击桌面右下角的网络图标&#xff0c;依次选择【网络和Internet设置】、【WLAN】、【网络和共享中心】。点击已连接的无线网络。依次点击【无线属性】、【安全】&#xff0c;勾选下方【显示字符】即可。 方式二&#xff1a; 在开始菜单输入“cmd”进入命令…

脚本实现登陆滑块

脚本实现登陆滑块 仅供学习参考&#xff0c;简单操作 你知道吗&#xff0c;滑动验证码居然是为了验证人类比机器人蠢而设计的。 你以为自己快速、准确地滑动拼图、对齐图案&#xff0c;才被允许通过&#xff0c;系统还说你超越了99%的用户&#xff0c;夸你“比闪电还快”&am…

【Python】collections模块:高效处理数据的利器

Python中的collections模块&#xff1a;高效处理数据的利器 Python的collections模块是一个内置模块&#xff0c;它提供了一些专用的容器数据类型&#xff0c;作为Python通用内置容器&#xff08;如列表list、字典dict、集合set和元组tuple&#xff09;的替代品。本文将深入探…

STM32_SPI

1、SPI简介 1.1 什么是SPI SPI&#xff0c;即Serial Peripheral Interface&#xff0c;串行外设接口。SPI是一种高速的、全双工、同步的串行通信总线&#xff1b;SPI采用主从方式工作&#xff0c;一般有一个主设备和一个或多个从设备&#xff1b;SPI需要至少4根线&#xff0c;…

网络安全法中的网络安全规定和措施

《中华人民共和国网络安全法》是中国首部全面规范网络空间安全管理的基础性法律&#xff0c;旨在加强网络安全&#xff0c;保障国家安全和社会公共利益&#xff0c;保护公民、法人和其他组织的合法权益&#xff0c;促进互联网的健康发展。以下是该法律中关于网络安全的一些核心…

Linux线程--线程创建、等待及退出

1. pthread_create 功能 创建一个新的线程。 原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);参数 thread: 指向pthread_t类型变量的指针&#xff0c;用于存储新创建线程的标识符。attr: 线程属性&…

采用bat结合zabbix监控sqlserver数据库表的信息

采用bat结合zabbix监控sqlserver数据库表的信息&#xff0c;当表插入某个特定的值的时候就发出告警。 监控需求&#xff1a;数据库存在某个表&#xff0c;该表不是一个固定的表名字&#xff0c;而且根据当前的日期生成表&#xff0c;比如tab20240501,tab20240502,需要查询当天…

安卓init进程详解

目录 一、概述1.1 Init进程如何被启动&#xff1f;1.2 Init进程启动后&#xff0c;做了哪些事&#xff1f; 二、kernel启动init进程2.1 kernel_init2.2 do_basic_setup 三、Init 进程启动源码分析3.1 Init 进程入口3.2 ueventd_main3.3 init 进程启动第一阶段3.4 加载SELinux规…

FLINK-窗口算子

参考资料 官方文档- WindowFlink中的时间和窗口之窗口 窗口 在流处理中&#xff0c;我们往往需要面对的是连续不断、无休无止的无界流&#xff0c;不可能等到所有所有数据都到齐了才开始处理。所以聚合计算其实只能针对当前已有的数据——之后再有数据到来&#xff0c;就需要继…

chat4-Server端保存聊天消息到mysql

本文档描述了Server端接收到Client的消息并转发给所有客户端或私发给某个客户端 同时将聊天消息保存到mysql 服务端为当前客户端创建一个线程&#xff0c;此线程接收当前客户端的消息并转发给所有客户端或私发给某个客户端同时将聊天消息保存到mysql 本文档主要总结了将聊天…

多项目的.net core解决方案(项目间引用)如何使用Docker部署

解决方案内部项目之间引用很正常&#xff0c;但我docker不是很熟&#xff0c;对一些基础命令含义还理解不深入&#xff0c;部署引用其他项目的项目总不成功。搜到了一篇非常适合初学者&#xff0c;从dockerfile命令讲解&#xff0c;到解决引用其他项目时如何docker部署的文章。…

JavaWeb_SpringBootWeb基础

先通过一个小练习简单了解以下SpringBootWeb。 小练习&#xff1a; 需求&#xff1a;使用SpringBoot开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 步骤&#xff1a; 1.创建SpringBoot项目&#xff0c;勾选We…