简单谈谈Python中的元祖(Tuple)和字典(Dict)


Posted in Python onApril 21, 2017

前言

本文记录了对于Python的数据类型中元祖(Tuple)和字典(Dict)的一些认识,以及部分内置方法的介绍。下面话不多说,来看看详细的介绍吧。

元祖 Tuple

特点:元祖内的数据不可变

一个元素的定义:T = (1,)

>>> T=(1,)
>>> type(T)
<type 'tuple'>

特殊的元祖:”可变”的元祖

>>> T=(1,2,3,[1,2,3])
>>> T[3][2] = 'vimiix'
>>> T
(1, 2, 3, [1, 2, 'vimiix'])

看上去元祖发生了变化,但真正变化的是[1,2,3]这个列表内的元素发生了变化,但是这个列表在T这个元祖中的内存地址是没有改变的。

结论:实际是元祖的元素包含了可变的元素,但是元祖中元素的内存地址没有变,所以所谓的元祖不可变是指元素指向的内存地址是不变

字典 Dict

特点:

      1、字典是Python中唯一的映射类型

      2、字典的键(KEY)必须是不可变的对象—>因为字典在计算机中是通过Hash算法存储的,Hash的特点是由KEY来计算存储的,如果KEY可变,将会导致数据混乱。

>>> D = {1:3,'vimiix':88}
>>> type(D)
<type 'dict'>
>>> D={[1,2,3]:100}
Traceback (most recent call last):
 File "<pyshell#15>", line 1, in <module>
 D={[1,2,3]:100}
TypeError: unhashable type: 'list' (这里提示list是不能被Hash计算的数据类型,因为list是可变的数据类型)
>>>

由此错误可以看出,字典的键只能使用不可变的对象(元祖是可以的),但是对于字典的值没有此要求

键值对用冒号‘:'分割,每个对之间用逗号‘,'分开,所有这些用花括号‘{}'包含起来

字典中的键值对是没有顺序的,故不可以用索引访问,只可以通过键取得所对应的值

拓展:如果定义的过程中,出现相同的键,最后存储的时候回保留最后的一个键值对)

>>> D= {1:2,1:3}
>>> D
{1: 3}

创建与访问

第一种创建方式:直接通过花括号包含键值对来创建

第二种创建方式:利用内置函数dict()来创建,注意!dict()括号内只能有一个参数,要把所有的键值对括起来

(1)

>>> D =dict((1,2),(3,4),(5,6))
Traceback (most recent call last):
 File "<pyshell#20>", line 1, in <module>
 D =dict((1,2),(3,4),(5,6))
TypeError: dict expected at most 1 arguments, got 3
>>> D =dict(((1,2),(3,4),(5,6)))
>>> D
{1: 2, 3: 4, 5: 6}

(2)还可以指定关键字参数

>>> D=dict(vimiix = 'VIMIIX')
>>> D
{'vimiix': 'VIMIIX'}

这里的小写‘vimiix'不可以加单引号,加了会报错!

(3)dict的内置方法 .fromkeys 有两个参数

>>> D = dict.fromkeys((1,'vimiix'),('common','value'))
>>> D
{1: ('common', 'value'), 'vimiix': ('common', 'value')}
>>>

实际的生产过程中,都是使用字典生成式来创建,根据现有的数据来生成对应的数据,有数据才有意义。

字典生成式栗子:

>>> L1 = [1,2,3]
>>> L2 = ['a','v','vimiix']
>>> D={a:b for a in L1 for b in L2}
>>> D
{1: 'vimiix', 2: 'vimiix', 3: 'vimiix'}

此处只是一个生成式的栗子,但并不是理想答案,待学习如何生成一一对应的键值对

字典的内置方法:

get() :

获取键所对应的值,如果未找到返回None,找到返回对应的值

pop(key) :

弹出key对应的值,默认最后一个

popitem() :

随机返回并删除字典中的一对键和值(项)。为什么是随机删除呢?因为字典是无序的,没有所谓的“最后一项”或是其它顺序。在工作时如果遇到需要逐一删除项的工作,用popitem()方法效率很高。

update() :

更新或者新增一个键值对(有则改之无则加勉)

>>> D.update({'newitem':'update'})
>>> D
{'newitem': 'update', 1: 'vimiix', 2: 'vimiix', 3: 'vimiix'}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python解析xml文件实例分析
May 27 Python
Python的时间模块datetime详解
Apr 17 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
Python双向循环链表实现方法分析
Jul 30 Python
python日期与时间戳的各种转换示例
Feb 12 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
Django Model中字段(field)的各种选项说明
May 19 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
python如何求100以内的素数
May 27 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
python import 上级目录的导入
Nov 03 Python
Python学习笔记之解析json的方法分析
Apr 21 #Python
Python正则抓取网易新闻的方法示例
Apr 21 #Python
Python中shape计算矩阵的方法示例
Apr 21 #Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 #Python
用python找出那些被“标记”的照片
Apr 20 #Python
python实现12306火车票查询器
Apr 20 #Python
Python编程修改MP3文件名称的方法
Apr 19 #Python
You might like
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
popdiv
2006/07/14 Javascript
javascript的对话框详解与参数
2007/03/08 Javascript
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
学生周末回家住宿长期请假条
2014/02/15 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
安全生产大检查方案
2014/05/07 职场文书
绵山导游词
2015/02/05 职场文书
记者节感言
2015/08/03 职场文书
公司安全管理制度范本
2015/08/05 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
vue3获取当前路由地址
2022/02/18 Vue.js