简单谈谈Python中的元祖(Tuple)和字典(Dict)
作者:Vimiix 发布时间:2022-12-14 03:26:26
前言
本文记录了对于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'}
来源:http://www.vimiix.com/2017/03/31/Python-Introduction-of-tuple-and-dict.html
猜你喜欢
- Pytorch提取模型特征向量# -*- coding: utf-8 -*-"""dj""
- 本文实例讲述了Python requests库用法。分享给大家供大家参考,具体如下:requests是Python中一个第三方库,基于 ur
- 一.docx模块Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把
- 问题Python 中 PDF 转图片一般用的是 pdf2image。有时我们会发现 PDF 转出来的图片都是空白,或者缺失了一些字,具体表现
- 笔者认为,在创建索引时要做到三个适当,即在适当的表上、适当的列上创建适当数量的索引。虽然这可以通过一句话来概括优化的索引的基本准则,但是要做
- 经常有需要扫描目录,对文件做批量处理的需求,所以对目录处理这块做了下学习和总结。Python 中扫描目录有两种方法:os.listdir 和
- Python使用缓存在开发Web应用或分布式系统时,缓存是常见的解决方案之一,它可以大幅提升系统性能。在Python中,我们可以使用内存缓存
- 本文的目标是将表1论文及出版物与表2出版物及其指标进行匹配。利用pandas的merge函数实现表的左外连接。左外连接即左表的外连接,左表保
- 浏览器打开网页的过程就是爬虫获取数据的过程,两者是一样一样的。浏览器渲染的网页是丰富多彩的数据集合,而爬虫得到的是网页的源代码htm有时候,
- 我就废话不多说了,大家还是直接看代码吧~'''Created on 2018-4-16'''
- 前言本文仅仅介绍了常见的一些JS加密,并记录了JS和Python的实现方式常见的加密算法基本分为这几类:(1)base64编码伪加密(2)线
- 1.导入依赖包import ( "github.com/spf13/viper")2.编写ya
- 在SQL Server 2005中,它的另外一个强大的新特点是数据库快照。数据库快照是一个数据库的只读副本,它是数据库所有数据的映射,由快照
- 概述自己在用labelImg打好标签后,想只用其中几类训练,不想训练全部类别,又不想重新打标生成.xml文件,因此想到这个办法:直接在.xm
- Flask的模板功能是基于Jinja2模板引擎来实现的。模板文件存放在当前目前下的子目录templates(一定要使用这个名字)下。main
- Golang精编100题能力模型(测试)初级primary:熟悉基本语法,能够看懂代码的意图;在他人指导下能够完成用户故事的开发,编写的代码
- 关于书写习惯,遵循曾经总结过的风格标准,现在一点都没有变。并且近来翻看高手作品,横向连排似乎在大产品项目中逐渐成为主流,个人认为如此维护效率
- 报错现象File "<string>", line 1SyntaxError: unexpected EOF
- 前言:今天我教大家如何利用Python自动化操作Excel,包括:介绍操作Excel的工具包、安装方法及操作Excel具体方法。对于每天有大
- 本文主要给大家讲解了Apriori算法的基础知识以及Apriori算法python中的实现过程,以下是所有内容:1. Apriori算法简介