python输出键值列表_Python 键值分组或分区数据
Python 使用键值分组或者分区数据,对分组后的数据做何种归约是没有限制的。数据中可能包含一些自变量或者因变量。可以通过自变量对数据进行分区,然后计算每个分区的各项汇总值,包括最大值、最小值、平均值以及标准差等。
对数据做复杂归约的关键是保存每组中的所有数据。Counter函数仅收集相同数据出现的频次,我们需要基于键值将原始数据转换为序列。
简而言之,每个5海里的箱子中都保存了该范围内路径段的所有数据,而不仅仅是出现次数。不妨将分区看作递归,或者defaultdict(list)对象的有状态应用,下面介绍groupby()函数的递归定义,它相对简单一些。
显然,groupby(C, key)函数对空集合C的返回值是空字典dict(),或者一般而言,空defaultdict(list)对象。
对于非空集合,首先处理集合头部C[0],然后递归处理集合尾部C[1:]。可以使用head, *tail = C来提取集合的头部和尾部,如下所示:
下面用dict[key(head)].append(head)将头部元素放入结果字典中,然后用groupby (tail, key)方法处理剩余数据。
如下所示创建函数:
内部函数group_into()实现了核心的递归定义部分,当集合collection为空时返回输入的字典参数。非空集合则分成头部和尾部,头部用于更新字典,尾部包含所有剩余元素,以递归方式更新字典。
类型标示区分了数据源类型S_和键类型K_。作为key参数的函数必须接收S_类型的参数,返回K_类型的值。前面很多例子都包含了从Leg对象中取出距离的函数。套用Callable[[S_], K_],数据源类型S_是Leg,键类型K_是float。
这里不能用Python的默认参数将上面的函数简化为简单函数,例如下面的实现方法不可取:
这样写的话,对group_by()函数的所有调用都将使用同一个defaultdict(list)对象。Python只创建一次默认值,用可变对象做默认值,其行为往往不符合开发者的预期。这里选用嵌套函数作为实现方案,而没有使用不可变的默认参数(例如None)结合复杂的逻辑判断来实现。用外层包装函数初始化内嵌函数的参数。
下面对距离数据进行分组:
首先定义了一个简单且可复用的匿名函数,将距离数据按照5海里进行分箱,然后利用该匿名函数对数据进行分组。
检查分箱后的数据,如下所示:
输出结果如下:
或者用迭代方法实现partition()函数,如下所示:
进行尾调用优化时,命令式实现的核心部分与递归定义是一致的。前面已经分析了这行代码,保证改写后的输出与之前一样。其余部分作为解决Python递归限制的常规编程实践,与之前的尾调用优化实现是一致的。
类型标示区分了数据源类型S_和键类型K_。请注意,defaultdict(list)的返回值要用Dict[K_, List[S_]]标示协助mypy工具确认代码正常运行,否则会返回错误信息:error: Need type annotation for variable。defaultdict可以包含任何类型组合,如果没有类型标示,将无法确认是否使用了正确的类型。
也可以把这里的类型标示写成注释的形式,如下所示:
低版本的pylint工具要求必须这样写,因此推荐使用1.8及之后的版本。
python输出键值列表_Python 键值分组或分区数据相关推荐
- python如何创建一个列表_python怎样快速构建列表?
来自"专业人士笔记":创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!zhuanlan.zhihu.com Python列表是Python程序中广泛使用的一种 ...
- python中对列表排序_在Python中对嵌套列表进行排序和分组
在Python中对嵌套列表进行排序和分组 我具有以下数据结构(列表列表) [ ['4', '21', '1', '14', '2008-10-24 15:42:58'], ['3', '22', '4 ...
- python函数没有修改列表_Python:通过引用创建一个修改列表的函数不是值
Python以相同的方式传递所有内容,但是通过"通过值"或"通过引用"来调用它不会清除所有内容,因为Python的语义与通常应用的语言不同.如果我要描述它,我会 ...
- python输出结果空格分割_python 输出列表元素实例(以空格/逗号为分隔符)
给定list,如何以空格/逗号等符号以分隔符输出呢? 一般的,简单的for循环可以打印出list的内容: l=[1,2,3,4] for i in l: print(i) 输出结果一行一个元素: 1 ...
- python怎么创建字符串列表_Python(字符串,列表,元组,字典)
1.字符串:标识" " PS:字符串是%s:整数是%d:浮点数%f strip:移除(空白或者特定字符) split:分割 len:长度(获取元素的个数) 索引 切片 2.列表li ...
- python生成随机整数列表_python生成随机整数
原博文 2019-10-08 11:09 − python生成随机不重复的整数,用random中的sample index = random.sample(range(0,10),10) 上面是生成不 ...
- python如何返回一个列表_python如何返回元组,列表或字典的?
Python中的数据结构用于存储数据集合,这些数据可以从函数中返回.那么python如何返回元组,列表或字典的?在本文中,我们将探讨如何从这些数据结构中返回多个值:元组,列表和字典.您可以从Pytho ...
- python元组读取到列表_Python 学习笔记(1)Python容器:列表、元组、字典与集合...
Python容器:列表.元组.字典与集合 列表: 1.列表 的创建 使用[ ] 或者list()创建列表:empty_list = [ ] 或者 empty_list= list() 使用list() ...
- python遍历多层嵌套列表_python遍历多层嵌套列表
python 多层嵌套的json内容 怎么获取 如下,已经实现获取json中的指定内容,先在的问题是:有的json目标内容可以首先使用json包的loads函数对json数据进行解析,然后就可以像操作 ...
最新文章
- 基于OS信号实现Java异步通知
- python数据库模块_十二、Python高级功能之Mysql数据库模块
- 【效率】NB,真PDF神处理工具!
- RabbitMQ 入门:1. Message Broker(消息代理)
- 学会这两招,快速突出图表重点,让老板眼前一亮
- Create React App 2.0 华丽登场
- 骨牌铺方格(HDU-2046)
- 苹果cmsV10仿哈哩哈哩动漫自适应模板
- C++ STL之vector详解
- github html5 预览,github 上如何直接预览仓库中的html
- ubuntu 卡死 安装 桌面_Ubuntu下图形界面卡死解决办法
- 如何计算代码运行的时间?
- python表示倍数的英语句型_5种倍数表达法句型
- 浙江省等保测评机构项目测评收费价格标准参考
- 《刷新:重新发现商业与未来》读后感
- 《Linux命令行与shell脚本大全》笔记
- GNU 和 UNIX 命令
- win7防火墙在哪里设置【系统天地】
- 移动端页面键盘弹出后导致body高度变低背景图片被挤上去解决方法
- 0ra-12170 tns 连接超时
热门文章
- CVPR 2019开源论文 | Rob-GAN:生成器、鉴别器以及对抗攻击者
- ACL 2018论文解读 | 基于路径的实体图关系抽取模型
- 本期最新 9 篇论文,帮你完美解决「读什么」的问题 | PaperDaily #19
- 云计算(Cloud Computing)的前世今生
- json文件读取并转换成为字典python
- waitpid最后以一个参数设为0_西门子MM440变频器参数设置
- 【MyBatis使用】mapper.xml 中特殊符号的 2 种处理方法(CDATA区+替代字符举例)
- Web前端中级认证php,1+x 证书 Web 前端开发中级理论考试 (试卷 6 )
- 联发科mtk和骁龙730哪个好_天玑720和骁龙730g哪个好?两款处理器应该如何选择?...
- shiro之第一个程序认证