【python cookbook】【数据结构与算法】9.在两个字典中寻找相同点

问题:寻找两个字典中间相同的地方(相同的键、相同的值等)

解决方案:通过keys()或者items()方法来执行常见的集合操作(比如求并集、交集和差集)

>>> a={‘x‘:1,‘y‘:2,‘z‘:3}
>>> b={‘ww‘:10,‘x‘:11,‘y‘:2}
>>> a.keys()& b.keys()  #键的交集
{‘y‘, ‘x‘}
>>> a.keys()- b.keys() #键的差集
{‘z‘}
>>> a.keys()| b.keys() #键的并集
{‘ww‘, ‘y‘, ‘x‘, ‘z‘}
>>> a.items()& b.items()
{(‘y‘, 2)}
>>> a.items()- b.items()
{(‘z‘, 3), (‘x‘, 1)}
>>> a.items()| b.items()
{(‘ww‘, 10), (‘z‘, 3), (‘x‘, 1), (‘x‘, 11), (‘y‘, 2)}
>>> 

这些类型的操作也可用来修改或过滤掉字典中的内容。例如:

>>> c = {key:a[key] for key in a.keys()-{‘w‘,‘z‘}}  #新建一个去掉某些键的新字典
>>> c
{‘y‘: 2, ‘x‘: 1}
>>> 

总结:

字典的keys()方法、items()方法支持集合操作,但是values()方法不支持。因为在字典中从值的角度来看并不能保证所有的值都是唯一的,这会导致某些集合操作存在问题。但是可以通过将值转化为集合来实现此类操作。

时间: 2024-10-25 16:51:37

【python cookbook】【数据结构与算法】9.在两个字典中寻找相同点的相关文章

[0x01 用Python讲解数据结构与算法] 关于数据结构和算法还有编程

忍耐和坚持虽是痛苦的事情,但却能渐渐地为你带来好处. ——奥维德 一.学习目标 · 回顾在计算机科学.编程和问题解决过程中的基本知识: · 理解“抽象”在问题解决过程中的重要作用: · 理解并实现抽象数据结构: · 复习Python编程语言 二.写在前面 自第一台电子计算机使用线路和开关传达人类的指令以来,我们编程的思考方式有了很大的改变,在很多方面,计算机技术的发展为计算机科学家提供了众多的工具和平台去实现他们的想法.高性能理器,高速网络和大内存使得计算机研究者必须掌握在这样复杂的螺旋式通道中

python cookbook第三版学习笔记二:字典

一般来说字典中是一个键对应一个单值的映射,如果想一个键值映射多个值,那么就需要将这些值放到另外的容器中,比如列表或者集合. 比如d={'a':[1,2]} Collections中的defaultdict模块会自动创建这样的字典.如下 d=defaultdict(list) d['a'].append(1) d['a'].append(2) d['b'].append(3) defaultdict(<type 'list'>, {'a': [1, 2], 'b': [3]}) 下面再来看下字典

【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素

问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是为此类问题所设计的.它的一个非常方便的most_common()方法直接告诉你答案. # Determine the most common words in a list words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 'the', 'eyes', 'the', 'eyes', 'the', '

Python实现数据结构和算法之桶排序

桶排序 桶排序从 1956 年就开始被使用,该算法的基本思想是由E.J.Issac 和 R.C.Singleton 提出来的. 这个算法就好比有 11 个桶,编号从 0~10.每出现一个数,就在对应编号的桶中放一个小旗子,最后只要数数每个桶中有几个小旗子就 OK 了.例如 2 号桶中有 1 个小旗子,表示2 出现了一次;3 号桶中有 1 个小旗子,表示 3 出现了一次;5 号桶中有 2 个小旗子,表示 5出现了两次;8 号桶中有 1 个小旗子,表示 8 出现了一次. 代码 1 def main(

Python实现数据结构和算法之冒泡排序

冒泡排序 冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来. 如果有 n 个数进行排序,只需将 n?1 个数归位,也就是说要进行n-1 趟操作.而“每一趟”都需要从第 1 位开始进行相邻两个数的比较,将较小的一个数放在后面,比较完毕后向后挪一位继续比较下面两个相邻数的大小,重复此步骤,直到最后一个尚未归位的数,已经归位的数则无需再进行比较. 代码 1 def _bubbleSort(): 2 a = [] 3 n = int(input('您需要输入几个数进行排序

数据结构与算法问题 判断两序列是否为同一二叉搜索树序列

题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树. 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树. 输出: 如果序列相同则输出YES,否则输出NO 样例输入: 2 567432 543267 576342 0 样例输出: YES NO 来源:

『Collections』数据结构和算法_容器型value字典&amp;顺序字典

一.collections.defaultdict:多值映射字典 defaultdict省去了初始化容器的过程,会默认value对象为指定类型的容器 指定list时可以使用.append, from collections import defaultdict d = defaultdict(list) d['a'].append(1) d defaultdict(list, {'a': [1]}) 指定set时可以使用.add, d = defaultdict(set) d['a'].add(

【算法】求两个数组中相同的元素及其个数(C语言、Java实现)

简介: 方法1:(时间复杂度O(n^2)) public void getNum(String arr1, String arr2) { for (int i = 0; i < arr1.length; i++) { for () { } } }

Python强化训练笔记(五)——找出多个字典中的公共键

在这个问题中,我们期望得到的结果是找到这三轮比赛中,每轮都进球的球员都有谁.下面用python来模拟一下,先生成一批数据: >>> from random import randint, sample >>> # sample是取样的意思,例如sample('abcde', 2),会在'abcde'这个字符串中随机抽样2个字符出来 >>> {x: randint(1,3) for x in sample('abcdef', randint(3, 6))