鱼C论坛

 找回密码
 立即注册
查看: 1753|回复: 6

[技术交流] 【Cookbook】1.9 查找两字典的相同点

[复制链接]
发表于 2020-3-22 10:55:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题
怎样在两个字典中寻寻找相同点(比如相同的键、相同的值等等)?

解决方案
---
文中的思路只供参考,如果你有更好的解决办法和广大鱼油分享哦!
---
考虑下面两个字典:

  1. a = {
  2.     'x' : 1,
  3.     'y' : 2,
  4.     'z' : 3
  5. }
复制代码

  1. b = {
  2.     'w' : 10,
  3.     'x' : 11,
  4.     'y' : 2
  5. }
复制代码

为了寻找两个字典的相同点,可以简单的在两字典的 keys() 或者 items() 方法返回结果上执行集合操作。比如:

  1. # Find keys in common
  2. a.keys() & b.keys() # { 'x', 'y' }
  3. # Find keys in a that are not in b
  4. a.keys() - b.keys() # { 'z' }
  5. # Find (key,value) pairs in common
  6. a.items() & b.items() # { ('y', 2) }
复制代码

这些操作也可以用于修改或者过滤字典元素。 比如,假如你想以现有字典构造一个排除几个指定键的新字典。 下面利用字典推导来实现这样的需求:

  1. # Make a new dictionary with certain keys removed
  2. c = {key:a[key] for key in a.keys() - {'z', 'w'}}
  3. # c is {'x': 1, 'y': 2}
复制代码


                               
登录/注册后可看大图



                               
登录/注册后可看大图


讨论
一个字典就是一个键集合与值集合的映射关系。 字典的 keys() 方法返回一个展现键集合的键视图对象。 键视图的一个很少被了解的特性就是它们也支持集合操作,比如集合并、交、差运算。 所以,如果你想对集合的键执行一些普通的集合操作,可以直接使用键视图对象而不用先将它们转换成一个 set。

字典的 items() 方法返回一个包含 (键,值) 对的元素视图对象。 这个对象同样也支持集合操作,并且可以被用来查找两个字典有哪些相同的键值对。

尽管字典的 values() 方法也是类似,但是它并不支持这里介绍的集合操作。 某种程度上是因为值视图不能保证所有的值互不相同,这样会导致某些集合操作会出现问题。 不过,如果你硬要在值上面执行这些集合操作的话,你可以先将值集合转换成 set,然后再执行集合运算就行了。


                               
登录/注册后可看大图



  1. 摘自《Python Cookbook》第三版
  2. 翻译项目github源地址:yidao620c/python3-cookbook
  3. Copyright (c) 2014-2018 Xiong Neng and other contributors
  4. 遵循Apache License 2.0 协议
复制代码
索引贴

暂无待更新~

由于原项目在线阅读不方便,因此转载给各位(才不是水!)
Cookbook系列帖子正在不断完善哦,希望能对已经初步了解python以及算法知识的你有所帮助~
获取更新欢迎关注淘帖https://fishc.com.cn/forum.php?mod=collection&action=view&ctid=1664


喜欢记得评分哦!


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-22 11:36:20 | 显示全部楼层

回帖奖励 +2 鱼币

支持楼主!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-22 12:02:39 | 显示全部楼层

回帖奖励 +2 鱼币

忽然发现字典的.keys(),.values(),.items()返回的都是特有的一种对象

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
dlnb526 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-22 18:35:13 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-22 19:45:24 | 显示全部楼层

回帖奖励 +2 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-23 09:08:50 | 显示全部楼层

回帖奖励 +2 鱼币

慢慢来最快
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 14:56:21 | 显示全部楼层
牛气,学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 09:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表