简单谈谈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之折腾一下目录
Oct 24 Python
Python HTMLParser模块解析html获取url实例
Apr 08 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
PyCharm第一次安装及使用教程
Jan 08 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
Python基于unittest实现测试用例执行
Nov 25 Python
python中round函数保留两位小数的方法
Dec 04 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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
用PHP实现多级树型菜单
2006/10/09 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
PHP单链表的实现代码
2016/07/05 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
javascript date格式化示例
2013/09/25 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
Python实现将xml导入至excel
2015/11/20 Python
详解python编译器和解释器的区别
2019/06/24 Python
python里dict变成list实例方法
2019/06/26 Python
Python中实现输入一个整数的案例
2020/05/03 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
外贸学院会计专业应届生求职信
2013/11/14 职场文书
创伤外科专业推荐信范文
2013/11/19 职场文书