python 字典的常见操作
字典
字典的增删改查
字典的创建方式:
# 创建字典类型 info = { 'name':'李白', ', 'sex':'男' } msg = { 'user01':'Longzeluola', 'user02':'xiaozemaliya', 'user03':'cangjingkong' }
字典存储数据的时候,采取的是key:value的形式,是一组无序的存储。在需要的时候通过key就能够快速的获取value。
msg = { 'user01':'Longzeluola', 'user02':'xiaozemaliya', 'user03':'cangjingkong' } print(msg['user01']) # Longzeluola
字典的值可以根据key值获取并且进行更改。
msg = { 'user01':'Longzeluola', 'user02':'xiaozemaliya', 'user03':'cangjingkong' } msg['user03'] = '泷泽萝拉'
结果:
{'user01': 'Longzeluola', 'user02': 'xiaozemaliya', 'user03': '泷泽萝拉'}
那么字典中如果需要新添加数据的话,也可以通过设置key-value的形式来进行添加。
msg = { 'user01':'Longzeluola', 'user02':'xiaozemaliya', 'user03':'cangjingkong' } msg['user04'] = 'MaLiCang' print(msg)
结果:
{'user01': 'Longzeluola', 'user02': 'xiaozemaliya', 'user03': 'cangjingkong', 'user04': 'MaLiCang'}
而如果需要删除python中的数据,可以使用如下的三种方法:
msg = { 'user01':'Longzeluola', 'user02':'xiaozemaliya', 'user03':'cangjingkong' } # 删除字典方法一 #del msg['user01'] # {'user02': 'xiaozemaliya', 'user03': 'cangjingkong'} # 删除字典方法二 #msg.pop('user01') # # {'user02': 'xiaozemaliya', 'user03': 'cangjingkong'} # 删除字典方法三 msg.popitem() # {'user01': 'Longzeluola', 'user02': 'xiaozemaliya'}
补充
在上面的一些操作中,我们基本实现了字典的增删改查,但是在查的过程中,有一点是需要注意的,如上面的查询方式dir[key]这种,如果key值并不存在于字典中,就会出现一个keyerror的错误,所以为了避免错误,我们通常情况下都不会使用这种方式来进行字典的key值查找,而是通过下面的方法。
# 创建一个字典 msg = { 'user1101':'Xiaozemaliya', 'user1102':'Wutentlan', 'user1103':'Cangjingkong' } # 通过key值获取value 使用get方式,存在key,那么就返回对应的value,如果不存在key,那么就返回None print(msg.get('user1101')) # Xiaozemaliya print(msg.get('user1108')) # None
判断一个key是否存在于一个字典中,可以使用in 运算符。
# 创建一个字典 msg = { 'user1101':'Xiaozemaliya', 'user1102':'Wutentlan', 'user1103':'Cangjingkong' } # 使用in检测字典中是否存在指定的key print('user1101' in msg) # True print('user1109' in msg) # False
上面是使用in运算符判断key是否存在,需要注意的是,在python2.x 的版本中,判断一个key是否存在于字典中,可以使用msg.has_key()的方式来进行判断。
多级字典嵌套及操作
在字典中,一直以key-value的形式进行数据存储,但是value的值除了是字符串以外,还可以是其他类型的值。同时,在字典中,也可以继续嵌套字典等数据。具体操作如下:
# 创建一个多级的字典 av_catalog = { "欧美":{ "www.youporn.com": ["很多免费的,世界最大的","质量一般"], "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"], "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"], "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"] }, "日韩":{ "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"] }, "大陆":{ ":["全部免费,真好,好人一生平安","服务器在国外,慢"] } } # 更改key值 av_catalog['][1] = '可以在国内做一个镜像' print(av_catalog)
关于字典的补充说明
values 打印字典里面的所有的值
msg = { 'stu1101':'XiaomingStudent', 'stu1102':'XiaohongStudent', 'stu2201':'XiaolvStudent', 'stu3101':'XiaoZhangStudent' } # values() 方法 输出字典中所有的值 print(msg.values())
结果为:
dict_values(['XiaomingStudent', 'XiaohongStudent', 'XiaolvStudent', 'XiaoZhangStudent'])
keys 打印所有的key
msg = { 'stu1101':'XiaomingStudent', 'stu1102':'XiaohongStudent', 'stu2201':'XiaolvStudent', 'stu3101':'XiaoZhangStudent' } # keys 打印所有的key print(msg.keys())
结果为:
dict_keys(['stu1101', 'stu1102', 'stu2201', 'stu3101'])
setdefault
设置新的key:value ,如果设置的key在字典中存在,那么就会把之前的key以及value返回,新设置的就会失效,如果没有就把设置的key:value添加到字典中去。
msg = { 'stu1101':'XiaomingStudent', 'stu1102':'XiaohongStudent', 'stu2201':'XiaolvStudent', 'stu3101':'XiaoZhangStudent' } # 使用setdefault方法设置key:value msg.setdefault('stu3101','YanYanStudent') # 此时3101key 已经存在,并不会新增的内容所影响 print(msg) msg.setdefault('stu3102','LuLuStudent') # 此时新增加的key 3102 添加成功 print(msg)
update 更新合并
使用update方法,可以将两个字典合并,并且如果字典中存在重复的内容,会产生覆盖,如果内容不重复,就会被合并到一个字典中。
msg = { 'stu1101':'XiaomingStudent', 'stu1102':'XiaohongStudent', 'stu2201':'XiaolvStudent', 'stu3101':'XiaoZhangStudent' } test_info = { 'T1101':'YanYanTeacher', 'T1102':'LiBai', 'stu2201':'JingjingStudent' } msg.update(test_info) print(msg)
输出结果为:
{'stu1101': 'XiaomingStudent', 'stu1102': 'XiaohongStudent', 'stu2201': 'JingjingStudent', 'stu3101': 'XiaoZhangStudent', 'T1101': 'YanYanTeacher', 'T1102': 'LiBai'}
items 把一个列表转为一个元组
msg = { 'stu1101':'XiaomingStudent', 'stu1102':'XiaohongStudent', 'stu2201':'XiaolvStudent', 'stu3101':'XiaoZhangStudent' } print(msg.items())
输出结果为:
dict_items([('stu1101', 'XiaomingStudent'), ('stu1102', 'XiaohongStudent'), ('stu2201', 'XiaolvStudent'), ('stu3101', 'XiaoZhangStudent')])
fromkeys 创建一个初始化列表
test_dir = dict.fromkeys(['stu01','stu02','stu03'],[1,{'name':'YanYanStudent'}]) print(test_dir)
输出的结果为:
{'stu01': [1, {'name': 'YanYanStudent'}], 'stu02': [1, {'name': 'YanYanStudent'}], 'stu03': [1, {'name': 'YanYanStudent'}]}
此时通过dict.fromkeys方法,就创建出了一个新的字典,但是在这个字典中存在一个容易错的地方,如下:
test_dir = dict.fromkeys(['stu01','stu02','stu03'],[1,{'name':'YanYanStudent'}]) # 尝试着更改这个字典中的内容通过key值 test_dir['stu01'][1]['name'] = 'YanYanTeacher' print(test_dir)
我们在代码中更改了其中的一个key的值,结果输出却为:
{'stu01': [1, {'name': 'YanYanTeacher'}], 'stu02': [1, {'name': 'YanYanTeacher'}], 'stu03': [1, {'name': 'YanYanTeacher'}]}
此时我们发现所有的key对应的value都被改变了。而这也是我们在使用这个fromkeys方法的时候需要注意的点。
字典的循环输出
将字典中key和value循环输出,有以下的两种方式:
# 创建一个字典 msg = { 'T1101':'YanYanTeacher', 'T1201':'LuLuTeacher', 'T1301':'JingJingTeacher' } # 循环输出字典 -- 第一种方法 for i in msg: print(i,msg[i]) # 循环输出字典 -- 第二种方法 for i,v in msg.items(): print(i,v)
上面两种循环输出列表的方式输出的结果是一样的,但是较为推荐使用第一种,因为第一种方式的执行效率要高于第二种,因为第一种是直接根据key值取出value,而第二种方式则是要多出一步将字典转换为列表的步骤,所以效率相对来讲比较低。
python 字典的常见操作的更多相关文章
- Python字典及相关操作(内含例题)
Python字典类型 今天将会介绍一种在python中十分常见的组合数据类型——字典 通过一些实例来理解字典中的常规操作 什么是字典类型? 列表中查找是通过整数的索引(元素在列表中的序号)来实现查找功 ...
- 『无为则无心』Python序列 — 21、Python字典及其常用操作
目录 1.字典的应用场景 2.字典的概念 3.创建字典的语法 4.字典常见操作 (1)字典的增加操作 (2)字典的删除操作 (3)字典的修改 (4)字典的查找 (5)copy()复制 1.字典的应用场 ...
- python字典及相关操作
1.字典 1.1.字典特性 字典是一种key-value的数据类型.key必须可hash,必须为不可变数据类型,且必须是唯一的:value可以存放任意多个值.可修改.可以不唯一:字典是无序的,通过ke ...
- Objective-C:NSDectionary字典的常见操作
NSDectionary字典:它是一个存储键值的容器,每一个键key都对应着一个值value,可以通过键key一次性找到目标值value,这是一个比较好的存储器,相比于数组而言,它明显提高了查询效率. ...
- 字典的常见操作<一>
<1>修改元素 字典的每个元素中的数据是可以修改的,只要通过key找到,即可修改 Demo from pip._vendor.distlib.compat import raw_input ...
- 转:Python字典与集合操作总结
转自:http://blog.csdn.net/business122/article/details/7537014 一.创建字典 方法①: >>> dict1 = {} > ...
- python字典的常用操作,数据类型划分
一.数据类型划分之一 可分为:可变数据类型,不可变数据类型 不可变数据类型:元祖,布尔值(Bool),数值 int ,字符串 str 可哈希 可变数据类型: list,d ...
- python字符串的常见操作
find: 根据指定字符串获取对应的下标, 如果找不到对应的数据返回-1, 这里的-1表示没有找到数据 my_str = "hello" # find: 根据指定字符串获取对应的下 ...
- python字典与集合操作
字典操作 字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划.字母来查对应页的详细内容. 语法: info = { 's1': "jack", 's3' ...
随机推荐
- css锚点ios不兼容的方法
css锚点的正常方法: <a href="#1f"></a> <a name="1f"></a> ios出现的问 ...
- Spring MVC__自定义日期类型转换器
WEB层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们.说真的,以前真没这样做过,之前都是一口气查 ...
- 自动生成数学题型二(框架struts2)题型如((a+b)*c=d)
1. 生成题目 1.1 生成单个题目 public static String[] twoOperatorAndOperator(int num1, int num2) { double first ...
- 光场相机重聚焦之三——Matlab光场工具包使用、重聚焦及多视角效果展示
这一小节说一下Matlab光场工具包的使用,展示重聚焦和多视角的效果. 从Lytro illum中导出的raw数据为.lfp格式的光场图像文件(约52M大小),该文件包含以下几部分:光场图像数据raw ...
- stm32通过电调带动电机(可按键调速)
这几天在做32通过电调带动电机的实验,上网一查,发现这方面的资料很少,经过自己的亲自实践,总结出以下经验,供大家参考. 论坛上也有很多人说自己在做,但是都遇到了同样的瓶颈.我想他们大多是pwm的频率和 ...
- CentOS下安装JDK的三种方法
方法一:手动解压JDK的压缩包,然后设置环境变量 1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java[root@localhost ~]# c ...
- 运行第一个Docker容器
1. Docker介绍 Docker由dotCloud公司发起的一个内部项目,后来Docker火了,dotCloud公司改名为Docker了: Docker使用了Go语言开发,基于 Linux 内核的 ...
- linux管道(|)与重定向(<>)的异同
共同点:管道和重定向都改变程序的标准输入或者标准输出 区别: 管道(|)两边都是程序(命令),而重定向(<>)只有左边是程序(命令).即是,管道通过两个子进程来改变两边命令的输入或输出,重 ...
- IntelliJ-项目配置,解决no artifacts的warnings
1.名词解释 artifacts:是maven中的一个概念,表示项目/modules如何打包,比如jar,war,war exploded,ear等打包形式, 一个项目或者说module有了artif ...
- 【react】利用prop-types第三方库对组件的props中的变量进行类型检测
1.引言--JavaScript就是一个熊孩子 1.1对于JSer们来说,js是自由的,但同时又有许多让人烦恼的地方.javascript很多时候就是这么一个熊孩子,他很多时候并不会像C和java ...