众所周知,字典dict最大的好处就是查找或插入的速度极快,并且不想列表list一样,随着key的增加越来越复杂。但是dict需要占用较大的内存空间,换句话说,字典dict是以空间换速度。详细请见如下示例:


student = {'小萌': '1001', '小智': '1002', '小强': '1003', '小明': '1004'}# 由key查value很简单,直接调用:dict ['key'],如下:>>> student ['小强']# 结果显示:'1003'

但如果此时,我们想由value查找key,则会相对复杂一点,一般来说可通过如下3种方式实现:

充分利用 keys() 、values()、index() 函数

>>> list (student.keys()) [list (student.values()).index ('1004')]结果显示: '小明'

通过定义get_key函数的方式

>>> def get_key (dict, value):return [k for k, v in dict.items() if v == value]>>> get_key (student, '1002')# 结果显示:'小智'

将原字典dict进行反转得新字典new_dict,由原来的K-V存储形式,变为V-K存储形式

>>> new_dict = {v : k for k, v in dict.items()}>>> new_dict ['1001']# 结果显示:'小萌'

注意

虽然我们可以通过以上方式获得由value查找key的目的,但是我们必须明确一点:在字典dict中,key值是唯一的,且不可变;而value可以随意取值,且不唯一。之所以强调这一点,是因为在利用上述方法时,会出现失效的情况。如下所示:

假设此时原字典student发生了一些变化,变为:


student = {'小萌': '1001', '小智': '1002', '小强': '1003', '小明': ['1004', '1005']}

那么再次调用上述3种方法,由value查key时,则出现:

>>> list (student.keys()) [list (student.values()).index ('1004')]
# 结果显示:ValueError: '1004' is not in list

因为value不唯一,key—‘小明’ 对应了两个value,且他们以list形式存储着,所以如果只取其中一个value值是无法查找对应的key值,必须将多个value值组成的list视为一个整体,即:

>>> list (student.keys()) [list (student.values()).index (['1004', '1005'])]
# 结果显示:'小明'
>>> def get_key (dict, value):return [k for k, v in dict.items() if v == value]>>> get_key (student, '1004')# 结果显示:[ ]>>> get_key (student, ['1004', '1005'])
# 结果显示:'小明'#-----------------------------------------------------------------------------------
>>> new_dict = {v : k for k, v in dict.items()}# 回车后系统报错:TypeError: unhashable type: 'list'

由于key不可变且唯一,当K-V反转以后,key—‘小明’ 对应了两个value组成的list,反过来就变成了key,即此时由list充当key,因为list是可变动的,所以这在Python中是不允许的。

字典中由value查key的几点说明相关推荐

  1. Python基础——字典中由value查key的几点说明

    众所周知,字典dict最大的好处就是查找或插入的速度极快,并且不想列表list一样,随着key的增加越来越复杂.但是dict需要占用较大的内存空间,换句话说,字典dict是以空间换速度.详细请见如下示 ...

  2. 5、如何快速找到多个字典中的公共键(key) 6 如何让字典保持有序 7 如何实现用户的历史记录功能(最多n条)...

    5.如何快速找到多个字典中的公共键(key) from random import randint,sample #随机取数 # a = sample("ABCDEF",randi ...

  3. python输出字典的key_python3 打印输出字典中特定的某个key的方法示例

    本文实例讲述了python3 打印输出字典中特定的某个key的方法.分享给大家供大家参考,具体如下: 大家都知道python中的字典里的元素是无序的,不能通过索引去找到它,今天说我下通过下面几个方法去 ...

  4. python查询字典里的多个key_Python:如何快速找到多个字典中的公共键(key)

    方法一:for in 循环 from random import randint, sample a1 = {k; randint(1, 4) for k in 'abcdefg'} a2 = {k; ...

  5. python小技巧:获取字典中值最大者的key

    应用场景 在排八字的时候,丑由"辛","癸", "己"构成,分值分别为1,2,5.现在我们需要获取其中分值最大的键. >>> ...

  6. python小技巧:获取字典中值最大者的key 1

    应用场景 在排八字的时候,丑由"辛","癸", "己"构成,分值分别为1,2,5.现在我们需要获取其中分值最大的键. >>> ...

  7. 【100个 Unity实用技能】☀️ | C# 检查字典中是否存在某个Key的几种方法

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...

  8. python中字典的增删改查及其他常用操作

    本文原创,版权属作者个人所有,如需转载请联系作者本人.Q&微:155122733 ------------------------------------------------------- ...

  9. python字典怎么添加值_python字典中如何添加键值对

    添加键值对 首先定义一个空字典 1 >>> dic={} 直接对字典中不存在的key进行赋值来添加 1 2 3 >>> dic['name']='zhangsan' ...

最新文章

  1. Java Swing 树状组件JTree的使用方法【图】
  2. mysql syncbinlog_Mysql之sync-binlog参数
  3. java 可用内存_总可用内存java
  4. C++不同文件中相同变量的共享
  5. php并行运算,php多进程并行执行脚本的代码
  6. ASP.NET Core 基础知识(十四)错误处理
  7. 九月计划 附:《使用 Microsoft .NET 的企业解决方案模式》
  8. 查询sql一个字段重复的数据mysql_sql查询按两个字段查询重复记录
  9. javaScript第七天(1)
  10. python---异常处理结构
  11. c++中使用libxml2读取xml文件【转】
  12. 路由器长期通电好不好?
  13. Python GStreamer Tutorial
  14. [转]Fedora用root登录
  15. 代写python assignment经常用到的代码语法分享!
  16. vue属性绑定加载图片不成功
  17. xUtils框架t网络加载图片 结合SwipeRefreshLayou下拉刷新
  18. 比较火的NFT数字艺术品交易平台
  19. 69节入门python_小渣渣学习笔记 python day69 【Django】
  20. 基于OpenCV的 SVM算法实现数字识别(四)---代码实现

热门文章

  1. 双屏异显开机动画实现
  2. Linux设备驱动程序架构分析之SD Spec摘要
  3. Linux——TeamCity安装
  4. C/C++ strlen函数
  5. 一个可以用来站内检索的简单爬虫
  6. ipad8和ipad air4的区别
  7. 用python实现点阵屏_用Python代码来绘制彭罗斯点阵的教程
  8. 面试 - 排序算法总结
  9. ASP动态网页(网站)设计教程
  10. 人生感悟:面对骚扰电话