当前位置: 首页 > article >正文

Python Cookbook-4.13 获取字典的一个子集

任务

你有一个巨大的字典,字典中的一些键属于一个特定的集合,而你想创建一个包含这个键集合及其对应值的新字典。

解决方案

如果你不想改动原字典:

def sub_dict(somedict,somekeys,default = None):return dict([(k, somedict.get(k,default)) for k in somekeys ])

如果你从原字典中删除那些符合条件的条目:

def sub_dict_remove(somedict,somekeys,default = None):return dict([ (k, somedict.pop(k,default)) for k in somekeys ])

下面是两个函数的使用和效果:

>>>d = {'a':5,'b':6,'c':7}
>>>print sub_dict(d,'ab'),d
{'a':5,'b':6}{'a':5,'b':6,'c': 7}
>>> print sub_dict_remove(d,'ab'),d
{'a':5,'b':6}{'c':7}

讨论

在 Python 中,我在很多地方都用到了字典——数据库的行、主键和复合键,用于模板解析的变量名字空间等。我常常需要基于另外一个已有的大字典创建一个新字典,此字典的键是大字典的键的一个子集。在大多数情况下,原字典应该保持不变;但有时,我也需要在完成了抽取之后删除在原字典中的子集。本节的解决方案对两种可能性都给出了答案。区别仅仅在于,如果需要原字典保持原样不变,使用get方法,如果需要删除子集,则使用 pop 方法。

如果 somekeys 中的某元素k并不是 somedict的键,解决方案提供的函数会将k作为结果的键,并对应一个默认值(可以作为一个可选的参数传递给这两个函数,默认情况下是 None)。所以,最终结果也不一定是somedict 的子集。不过我却发现这种行为方式对我的应用非常有帮助。

当你认为 somekeys中的所有的元素都应当是 somedict 的键时,也许会希望在键“缺失的时候获得一个异常,它可以提示和警告你程序中的bug。记住,Tim Peters 在 The Zeno/Python 中说过“错误不应该被静静地略过,除非有意为之”(在 Python 的交互式解释器的提示符下敲入 import this 并回车,你将看到精炼的 Python 设计原则)。所以,如果从你的应用的角度看,键不匹配是一个错误,那么会希望马上得到一个异常来提醒你错误的发生。如果这的确是你所希望的,可以对解决方案中的函数略作修改:

def sub_dict_strict(somedict,somekeys):return dict([ (k,somedict[k]) for k in somekeys ])
def sub_dict_remove_strict(somedict,somekeys):return dict([ (k,somedict.pop(k)) for k in somekeys ])

这些更加严格的变体版本甚至比原版本更简单——这充分说明了Python 本来就喜欢在意外发生时抛出异常。
或者,你希望在键不匹配时直接将其忽略。这也只需要一点点修改:

def sub_dict_select(somedict,somekeys):return dict([ (k,somedict[k[) for k in somekeys if k in somedict])
def sub_dict_remove_select(somedict,somekeys):return dict([ (k,somedict,pop(k)) for k in somekeys if k in somedict))

列表推导中的if子句做完了我们期望的事,即在应用k之前先做鉴别工作。

在 Python 2.4中可以用生成器表达式来替代列表推导,用它作为本节中的函数的参数。我们只需略微修改 dict 的调用,将 dict([…])改成 dict(…)(移除临近圆括号的方括号),就能享受进一步的简化和速度的提升。不过这些修改不适用 Python2.3,因为它只支持列表推导而不支持生成器表达式。

相关文章:

Python Cookbook-4.13 获取字典的一个子集

任务 你有一个巨大的字典,字典中的一些键属于一个特定的集合,而你想创建一个包含这个键集合及其对应值的新字典。 解决方案 如果你不想改动原字典: def sub_dict(somedict,somekeys,default None):return dict([(k, somedict.get(k,default)) for k…...

JSP(实验):带验证码的用户登录

[实验目的] 1.掌握应用request对象获取表单提交的数据。 2.掌握解决获取表单提交数据产生中文乱码的问题。 3.掌握使用response对象进行定时跳转功能。 4.掌握使用session对象完成登录和注销功能。 [实验要求] 设计带验证码…...

自然语言模型的演变与未来趋势:从规则到多模态智能的跨越

自然语言模型的演变与未来趋势:从规则到多模态智能的跨越 自然语言处理(NLP)作为人工智能领域最具挑战性的分支之一,在过去几十年经历了翻天覆地的变化。从最初基于规则的系统到如今拥有万亿参数的大型语言模型(LLMs),这一技术革新不仅彻底改…...

集多功能为一体的软件,支持批量操作。

今天我给大家分享一个超实用的小工具,真的是太好用了!这个软件是吾爱大神无知灰灰制作的,它能直接一键把webp格式的图片转换成png格式。 webp转为png 一键操作,支持压缩 其实,作者最近在工作中经常遇到webp格式的图片…...

linux压缩指令

今天我们来了解一下linux压缩指令,压缩是我们文件传输的一种重要手段,对此,我们是必须学习压缩指令的,那么话不多说,来看. 1.grep过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。 基本语法&#x…...

C++细节知识for面试

1. linux上C程序可用的栈和堆大小分别是多少,为什么栈大小小于堆? 1. 栈(Stack)大小 栈默认为8MB,可修改。 为什么是这个大小: ​安全性:限制栈大小可防止无限递归或过深的函数调用导致内存…...

Appium中元素定位的注意点

应用场景 了解这些注意点可以以后在出错误的时候,更快速的定位问题原因。 示例 使用 find_element_by_xx 或 find_elements_by_xx 的方法,分别传入一个没有的“特征“会是什么结果呢? 核心代码 driver.find_element_by_id("xxx") drive…...

污水处理厂人员定位方案-UWB免布线高精度定位

1. 方案概述 本方案采用免布线UWB基站与北斗卫星定位融合技术,结合UWBGNSS双模定位工卡,实现污水处理厂室内外人员高精度定位(亚米级)。系统通过低功耗4G传输数据,支持实时位置监控、电子围栏、聚集预警、轨迹回放等功…...

蓝桥刷题note11(好数)

1,好数 一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。 给定一个正整数 NN,请计算从 1 到 NN 一共…...

Elasticsearch 高级

Elasticsearch 高级 建议阅读顺序: Elasticsearch 入门Elasticsearch 搜索Elasticsearch 搜索高级Elasticsearch高级(本文) 1. nested 类型 1.1 介绍 Elasticsearch 中的 nested 类型允许你在文档内存储复杂的数据结构,比如一个…...

SQL Server 2022常见问题解答

以下是SQL Server 2022的常见问题解答,按主题分类整理: 一、安装与升级 SQL Server 2022的系统要求是什么? 支持的操作系统:Windows Server 2016及以上、Linux(Ubuntu 20.04/22.04, RHEL 8/9等)。内存:至少4GB(建议8GB+)。磁盘空间:6GB以上,具体取决于安装组件。如何…...

基于LLM的实时信息检索汇总分析系统

基于用户需求和技术发展趋势,设计基于LLM的实时信息检索汇总分析系统,方案如下: 一、系统架构设计 1. 分层多模态数据采集层 动态渲染适配引擎 采用混合爬虫技术: 静态页面:优化Scrapy框架,集成XPath模板库…...

C语言笔记数据结构(链表)

希望文章能对你有所帮助,有不足的地方请在评论区留言指正,一起交流学习! 目录 1.链表 1.1 链表概念和组成 1.2 链表的分类 1.3 顺序表和链表 2.单链表(无头单向不循环链表) 2.1 结点的创建 2.2 创建新的结点 2.3 单链表的打印 2.4 尾…...

Leetcode 两数相除

✅ LeetCode 29. 两数相除 — 思路总览 🧩 题目要求 给定两个整数 dividend 和 divisor,实现 整数除法,不能使用乘法 *、除法 / 和取余 % 运算符。 要求返回的结果应为 向零截断的整数商,即: 正数向下取整&#xf…...

C++ 初阶总复习 (16~30)

C 初阶总复习 (16~30) 目的16. 2009. volatile关键字的作用17. 2010.什么是多态 简单介绍下C的多态18. 2011. 什么是虚函数 介绍下C中虚函数的原理19. 2012 构造函数可以是虚函数嘛20. 2013.析构函数一定要是虚函数嘛?21. 2015. 什么是C中的虚…...

Koordinator-Metric查询

以CollectAllPodMetricsLast()举例,看看koordinator怎样使用tsdb进行查询。 CollectAllPodMetricsLast() GenerateQueryParamsLast()传入metric采集间隔2倍时间调用CollectAllPodMetrics()func CollectAllPodMetricsLast(statesInformer statesinformer.StatesInformer, metr…...

人工智能图像识别Scala介绍

Scala 一.Scala 简介 Scala即Scalable Language(可伸缩的语言),Scala 语言是由 Martin Odersky 等人在 2003 年开发的,并于 2004 年首次发布。意味着这种语言设计上支持大规模软件开发,是一门多范式的编程语言。 Sc…...

PCL 点云多平面探测

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里实现了一种点云多平面探测的算法,该算法使用基于鲁棒统计的方法进行平面补丁检测。该算法具体过程:首先将点云细分为更小的块(使用二分法),然后尝试为每个点云块匹配一个平面。如果平面通过了鲁棒平面性测试…...

npm i 出现的网络问题

npm i 出现的网络问题 解决方案: npm config list 查看.npmrc文件中是否配置了proxy删除.npmrc文件中的proxy,保存。重新执行npm i命令。 顺便说说解决这个问题的心里路程 每次安装vue的环境的时候,经常遇到npm安装一些插件或者是依赖的时…...

C++中使用CopyFromRecordset将记录集拷贝到excel中时,如果记录集为0个,函数崩溃,是什么原因

文章目录 原因分析解决方案1. 检查记录集是否为空2. 安全调用COM方法3.进行异常捕获4. 替代方案:手动处理空数据 总结 在C中使用CopyFromRecordset将空记录集(0条记录)复制到Excel时崩溃的原因及解决方法如下: 原因分析 空记录集…...

代码随想录算法训练营--打卡day3

复习:标注感叹号的需要在电脑上重新做几遍 一.两两交换链表中的节点!! 1.题目链接 24. 两两交换链表中的节点 - 力扣(LeetCode) 2.思路 画图 3.代码 class Solution {public ListNode swapPairs(ListNode head) …...

c#的.Net Framework 的console 项目找不到System.Window.Forms 引用

首先确保是建立的.Net Framework 的console 项目,然后天健reference 应用找不到System.Windows.Forms 引用 打开对应的csproj 文件 在第一个PropertyGroup下添加 <UseWindowsForms>true</UseWindowsForms> 然后在第一个ItemGroup 下添加 <Reference Incl…...

蓝桥杯嵌入式学习笔记

用博客来记录一下参加蓝桥杯嵌入式第十六届省赛的学习经历 工具环境准备cubemx配置外部高速时钟使能设置串口时钟配置项目配置 keil配置烧录方式注意代码规范头文件配置 模块ledcubemx配置keil代码实现点亮一只灯实现具体操作的灯&#xff0c;以及点亮还是熄灭 按键cubemx配置k…...

zookeeper详细介绍以及使用

Zookeeper 是一个开源的分布式协调服务&#xff0c;提供了一个高效的分布式数据一致性解决方案。它的主要作用是维护集群中各个节点之间的状态信息&#xff0c;协调节点之间的工作&#xff0c;并处理节点宕机等故障情况。Zookeeper 的核心功能包括数据发布/订阅、分布式锁、集群…...

Blender多摄像机怎么指定相机渲染图像

如题目所说&#xff0c;当blender的场景里面有摄像机的时候&#xff0c;按F12可以预览渲染结果&#xff0c;但是当有多个摄像机的时候就不知道使用哪个进行渲染了。 之前在网上没有找到方法&#xff0c;就用笨方法&#xff0c;把所有的摄像机删除&#xff0c;然后设置自己需要…...

Redis场景问题1:缓存穿透

Redis 缓存穿透是指在缓存系统&#xff08;如 Redis&#xff09;中&#xff0c;当客户端请求的数据既不在缓存中&#xff0c;也不在数据库中时&#xff0c;每次请求都会直接穿透缓存访问数据库&#xff0c;从而给数据库带来巨大压力&#xff0c;甚至可能导致数据库崩溃。下面为…...

CSS 如何设置父元素的透明度而不影响子元素的透明度

CSS 如何设置父元素的透明度而不影响子元素的透明度 在 CSS 中&#xff0c;设置父元素的透明度&#xff08;如通过 opacity 属性&#xff09;会影响所有子元素的透明度&#xff0c;因为 opacity 是作用于整个元素及其内容的。如果想让父元素透明但不影响子元素的透明度&#x…...

Java的string默认值

在Java中&#xff0c;String类型的默认值取决于其定义和实例化的方式。 以下是关于String默认值的详细说明 未实例化的String变量‌ 如果定义一个String变量但未对其进行实例化&#xff08;即未使用new关键字或直接赋值&#xff09;&#xff0c;其默认值为:ml-search[null]。这…...

从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?

小T导读&#xff1a;TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务&#xff0c;轻松应对海量功率、电能及输入输出数据的实时统计与分析&#xff0c;并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外&#xff0c;taosX 强大的 transform 功能帮助用…...

观察者模式:解耦对象间的依赖关系

观察者模式&#xff1a;解耦对象间的依赖关系 JDK 中曾直接提供对观察者模式的支持&#xff0c;但因其设计局限性&#xff0c;现已被标记为“过时”&#xff08;Deprecated&#xff09;。不过&#xff0c;观察者模式的思想在 JDK 的事件处理、spring框架等仍有广泛应用。下面我…...