当前位置: 首页 > news >正文

【Python之旅】第二篇(四):字典

说明:

    显然Python中字典的学习过程与列表是一样的,主要是围绕下面的函数来进行重点学习:

1
2
3
4
5
6
7
8
9
10
11
>>> xpleaf.
xpleaf.clear(
xpleaf.copy(
xpleaf. get (
xpleaf.has_key(
xpleaf.items(
xpleaf.keys(
xpleaf.pop(
xpleaf.popitem(
xpleaf.setdefault(
xpleaf.update(




1.基本操作


--创建一个字典

1
2
3
4
5
6
7
8
>>> xpleaf = {
...          'name' : 'xpleaf' ,
...          'occupation' : 'student' ,
...          'hobby' : 'computer' ,
...          'dream' : 'excellent hacker'
... }
>>> xpleaf
{ 'hobby' 'computer' 'dream' 'excellent hacker' 'name' 'xpleaf' 'occupation' 'student' }

·容易观察到字典的输出并没有按照创建字典时的顺序进行输出,因为字典按哈希值查找内容,而不是按索引号;

·{key:value}是字典的基本语法格式,key是唯一的,value可为大多数数据类型;


--查看键值对应的内容

1
2
>>> xpleaf[ 'hobby' ]
'computer'


--修改键值对应的内容

1
2
3
>>> xpleaf[ 'hobby' ] =  'IT'
>>> xpleaf
{ 'hobby' 'IT' 'dream' 'excellent hacker' 'name' 'xpleaf' 'occupation' 'student' }


--添加一个键值对

1
2
3
>>> xpleaf[ 'girlfriend' ] =  'none'
>>> xpleaf
{ 'girlfriend' 'none' 'hobby' 'IT' 'dream' 'excellent hacker' 'name' 'xpleaf' 'occupation' 'student' }

·添加的元素在字典中的排序是随机的,因为索引号对字典没有意义(按照哈希值进行value值的查找);




2.has_key()函数


·功能:接受key的查询,以bool值形式返回查询字典中是否有该key;


·演示如下:

1
2
3
4
>>> xpleaf.has_key( 'dream' )
True
>>> xpleaf.has_key( 'wife' )
False




3.items()函数


·功能:将字典转换为列表,列表的元素为元组,其中左元素为key,右元素为value;


·演示如下:

1
2
>>> xpleaf.items()
[( 'girlfriend' 'none' ), ( 'hobby' 'IT' ), ( 'dream' 'excellent hacker' ), ( 'name' 'xpleaf' ), ( 'occupation' 'student' )]

·基于上述输出形式,可对字典的key和value进行遍历,如下:

1
2
3
4
5
6
7
8
>>>  for  key,value  in  xpleaf.items():
...   print key,value
... 
girlfriend none
hobby IT
dream excellent hacker
name xpleaf
occupation student

·item()函数的原理是把字典转换为列表存储在内存中,对于数据量大的情况下,会比较慢;

·大数据量的字典遍历方法:

1
2
3
4
5
6
7
8
>>>  for  key  in  xpleaf:
...   print key,xpleaf[key]
... 
girlfriend none
hobby IT
dream excellent hacker
name xpleaf
occupation student




4.get()函数


·功能:取对应key的value值;


·演示如下:

1
2
3
4
5
6
>>> xpleaf
{ 'girlfriend' 'none' 'hobby' 'IT' 'dream' 'excellent hacker' 'name' 'xpleaf' 'occupation' 'student' }
>>> xpleaf. get ( 'dream' )
'excellent hacker'
>>> xpleaf. get ( 'wife' )    ===>如果没有该key值则不会有输出
>>>

·即相当于dict[key]的方法取value值;




5.keys()函数


·功能:取出字典中的key值,并生成相应的列表;


·演示如下:

1
2
>>> xpleaf.keys()
[ 'girlfriend' 'hobby' 'dream' 'name' 'occupation' ]




5.pop()函数


·功能:弹出一个key,即删除一个键值对;


·演示如下:

1
2
3
4
5
6
>>> xpleaf
{ 'girlfriend' 'none' 'hobby' 'IT' 'dream' 'excellent hacker' 'name' 'xpleaf' 'occupation' 'student' }
>>> xpleaf.pop( 'girlfriend' )
'none'
>>> xpleaf
{ 'hobby' 'IT' 'dream' 'excellent hacker' 'name' 'xpleaf' 'occupation' 'student' }




6.popitem()函数


·功能:按顺序删除字典中的元素;


·演示如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> a
{ 'a' 1 'c' 3 'b' 2 'e' 5 'd' 4 6 'f' }
>>> a.popitem()
( 'a' 1 )
>>> a.popitem()
( 'c' 3 )
>>> a.popitem()
( 'b' 2 )
>>> a.popitem()
( 'e' 5 )
>>> a.popitem()
( 'd' 4 )
>>> a.popitem()
( 6 'f' )




7.setdefault()函数


·在字典中添加元素,如果原来存在该元素,则不进行任何修改;


·演示如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> xpleaf
{ 'hobby' 'IT' 'dream' 'excellent hacker' 'name' 'xpleaf' 'occupation' 'student' }
>>> xpleaf.setdefault( 'hobby' , 'computer' )    ===> 'hobby' 键值对已经存在,不会添加
'IT'
>>> xpleaf
{ 'hobby' 'IT' 'dream' 'excellent hacker' 'name' 'xpleaf' 'occupation' 'student' }
>>> xpleaf.setdefault( 'weight' , '55kg' )    ===> 'weight' 键值对不存在,会进行添加
'55kg'
>>> xpleaf
{ 'name' 'xpleaf' 'weight' '55kg' 'hobby' 'IT' 'dream' 'excellent hacker' 'occupation' 'student' }
>>> xpleaf.setdefault( 'wife' )    ===>添加没有的键值对,
>>> xpleaf
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' : None,  'hobby' 'IT' 'dream' 'excellent hacker' 'occupation' 'student' }




8.update()函数


·功能:合并两个字典


·演示如下:

1
2
3
4
5
6
7
8
9
>>> a
{ 'a' 1 'c' 3 'b' 2 }
>>> b
{ 'e' 4 'g' 6 'f' 5 }
>>> a.update(b)
>>> a
{ 'a' 1 'c' 3 'b' 2 'e' 4 'g' 6 'f' 5 }
>>> b
{ 'e' 4 'g' 6 'f' 5 }

·合并的顺序依然是随机的,原理与前面一样;

·更新的只是字典a,字典b没有变化;

·如果合并字典时有重复的item项,则会进行覆盖:

1
2
3
4
5
6
7
>>> a
{ 'a' 1 'c' 3 'b' 2 'e' 4 'g' 6 'f' 5 }
>>> c
{ 'b' 'cover2' 'g' 'cover1' }
>>> a.update(c)
>>> a
{ 'a' 1 'c' 3 'b' 'cover2' 'e' 4 'g' 'cover1' 'f' 5 }




9.values()函数


·功能:取字典中所有key的value值,并生成相应的列表


·演示如下:

1
2
3
4
>>> xpleaf
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' : None,  'hobby' 'IT' 'dream' 'excellent hacker' 'occupation' 'student' }
>>> xpleaf.values()
[ 'xpleaf' '55kg' , None,  'IT' 'excellent hacker' 'student' ]

·多用在value值的数据类型都相同的字典中,以用于数据的批量分析;




10.clear()函数


·功能:清空字典的item项


·演示如下:

1
2
3
4
5
>>> a
{ 'a' 1 'c' 3 'b' 'cover2' 'e' 4 'g' 'cover1' 'f' 5 }
>>> a.clear()
>>> a
{}

·与del不同,del是直接删除字典:

1
2
3
4
5
>>> del a
>>> a
Traceback (most recent call last):
   File  "<stdin>" , line  1 in  <module>
NameError: name  'a'  is  not defined




11.copy()函数


·功能:对字典进行浅复制;


·Python中普通情况下的“复制”:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> xpleaf
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' : None,  'hobby' 'IT' 'dream' 'excellent hacker' 'occupation' 'student' }
>>> xpleaf_copy = xpleaf
>>> xpleaf_copy
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' : None,  'hobby' 'IT' 'dream' 'excellent hacker' 'occupation' 'student' }
>>> xpleaf[ 'hobby' ] =  'IT_Field'
>>> xpleaf_copy
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' : None,  'hobby' 'IT_Field' 'dream' 'excellent hacker' 'occupation' 'student' }
>>> xpleaf_copy[ 'wife' ] =  'None!!!'
>>> xpleaf_copy
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' 'None!!!' 'hobby' 'IT_Field' 'dream' 'excellent hacker' 'occupation' 'student' }
>>> xpleaf
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' 'None!!!' 'hobby' 'IT_Field' 'dream' 'excellent hacker' 'occupation' 'student' }

·即将变量赋给其它变量只是将对象(实际的字典)作一个引用传递而已,修改任何一个引用都会改变原来对象的值;

·copy()的浅复制功能则不是引用传递:

1
2
3
4
5
6
7
8
>>> xpleaf_copy2 = xpleaf.copy()
>>> xpleaf_copy2
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' 'None!!!' 'hobby' 'IT_Field' 'dream' 'excellent hacker' 'occupation' 'student' }
>>> xpleaf_copy2[ 'wife' ] =  'CL'
>>> xpleaf_copy2
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' 'CL' 'hobby' 'IT_Field' 'dream' 'excellent hacker' 'occupation' 'student' }
>>> xpleaf
{ 'name' 'xpleaf' 'weight' '55kg' 'wife' 'None!!!' 'hobby' 'IT_Field' 'dream' 'excellent hacker' 'occupation' 'student' }

·当然copy()更重要的作用不仅在于此,这里只是简单提及它的作用。

相关文章:

  • 使用Optional更优雅地处理非空判断
  • 你能保证你的代码没有异常吗?
  • OC之NSString/NSMutableString
  • 公司CEO和我说:在系统优化的时候,不要轻易用多线程
  • phalapi-进阶篇6(解决大量数据存储数据库分表分库拓展)
  • 快速理解工厂方法模式,及其在源码中的应用
  • 线上报了内存溢出异常,又不完全是内存溢出
  • 用代码告诉你“问世间情为何物,直教人生死相许”
  • 互联网公司的完整开发流程是怎样的?
  • 如何在SpringBoot启动时执行初始化操作,两个简单接口就可以实现
  • BZOJ4584 : [Apio2016]赛艇
  • 查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了
  • 【C#公共帮助类】 ToolsHelper帮助类
  • 这次终于把Spring的监听器讲明白了
  • jquery ajax分页 js对象
  • [deviceone开发]-do_Webview的基本示例
  • 【知识碎片】第三方登录弹窗效果
  • canvas 高仿 Apple Watch 表盘
  • CAP 一致性协议及应用解析
  •  D - 粉碎叛乱F - 其他起义
  • ES6系统学习----从Apollo Client看解构赋值
  • js中forEach回调同异步问题
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Leetcode 27 Remove Element
  • Linux后台研发超实用命令总结
  • SQLServer之创建显式事务
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue中实现单选
  • Web标准制定过程
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 服务器之间,相同帐号,实现免密钥登录
  • 高程读书笔记 第六章 面向对象程序设计
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #Linux(帮助手册)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)学习JVM —— 垃圾回收机制
  • (三)c52学习之旅-点亮LED灯
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (四)图像的%2线性拉伸
  • (一一四)第九章编程练习
  • (转)linux下的时间函数使用
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .Net 代码性能 - (1)
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET单元测试
  • .NET关于 跳过SSL中遇到的问题
  • .net生成的类,跨工程调用显示注释
  • @Not - Empty-Null-Blank
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce