字典中由value查key的几点说明
众所周知,字典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的几点说明相关推荐
- Python基础——字典中由value查key的几点说明
众所周知,字典dict最大的好处就是查找或插入的速度极快,并且不想列表list一样,随着key的增加越来越复杂.但是dict需要占用较大的内存空间,换句话说,字典dict是以空间换速度.详细请见如下示 ...
- 5、如何快速找到多个字典中的公共键(key) 6 如何让字典保持有序 7 如何实现用户的历史记录功能(最多n条)...
5.如何快速找到多个字典中的公共键(key) from random import randint,sample #随机取数 # a = sample("ABCDEF",randi ...
- python输出字典的key_python3 打印输出字典中特定的某个key的方法示例
本文实例讲述了python3 打印输出字典中特定的某个key的方法.分享给大家供大家参考,具体如下: 大家都知道python中的字典里的元素是无序的,不能通过索引去找到它,今天说我下通过下面几个方法去 ...
- python查询字典里的多个key_Python:如何快速找到多个字典中的公共键(key)
方法一:for in 循环 from random import randint, sample a1 = {k; randint(1, 4) for k in 'abcdefg'} a2 = {k; ...
- python小技巧:获取字典中值最大者的key
应用场景 在排八字的时候,丑由"辛","癸", "己"构成,分值分别为1,2,5.现在我们需要获取其中分值最大的键. >>> ...
- python小技巧:获取字典中值最大者的key 1
应用场景 在排八字的时候,丑由"辛","癸", "己"构成,分值分别为1,2,5.现在我们需要获取其中分值最大的键. >>> ...
- 【100个 Unity实用技能】☀️ | C# 检查字典中是否存在某个Key的几种方法
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...
- python中字典的增删改查及其他常用操作
本文原创,版权属作者个人所有,如需转载请联系作者本人.Q&微:155122733 ------------------------------------------------------- ...
- python字典怎么添加值_python字典中如何添加键值对
添加键值对 首先定义一个空字典 1 >>> dic={} 直接对字典中不存在的key进行赋值来添加 1 2 3 >>> dic['name']='zhangsan' ...
最新文章
- Java Swing 树状组件JTree的使用方法【图】
- mysql syncbinlog_Mysql之sync-binlog参数
- java 可用内存_总可用内存java
- C++不同文件中相同变量的共享
- php并行运算,php多进程并行执行脚本的代码
- ASP.NET Core 基础知识(十四)错误处理
- 九月计划 附:《使用 Microsoft .NET 的企业解决方案模式》
- 查询sql一个字段重复的数据mysql_sql查询按两个字段查询重复记录
- javaScript第七天(1)
- python---异常处理结构
- c++中使用libxml2读取xml文件【转】
- 路由器长期通电好不好?
- Python GStreamer Tutorial
- [转]Fedora用root登录
- 代写python assignment经常用到的代码语法分享!
- vue属性绑定加载图片不成功
- xUtils框架t网络加载图片 结合SwipeRefreshLayou下拉刷新
- 比较火的NFT数字艺术品交易平台
- 69节入门python_小渣渣学习笔记 python day69 【Django】
- 基于OpenCV的 SVM算法实现数字识别(四)---代码实现