简单谈谈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中requests小技巧
May 10 Python
简单的python协同过滤程序实例代码
Jan 31 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
python多个模块py文件的数据共享实例
Jan 11 Python
python3.x实现base64加密和解密
Mar 28 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
Django用户认证系统 组与权限解析
Aug 02 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
Python+Opencv实现把图片、视频互转的示例
Dec 17 Python
Python基础之元组与文件知识总结
May 19 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 fread()使用技巧
2010/01/22 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
php强制运行广告的方法
2014/12/01 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
应届实习生的自我评价范文
2014/01/05 职场文书
百日安全活动总结
2014/05/04 职场文书
大气污染防治方案
2014/05/19 职场文书
小学见习报告
2014/10/31 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
政审证明材料
2015/06/19 职场文书
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
Python读写yaml文件
2022/03/20 Python
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript