前言
本文记录了对于Python的数据类型中元祖(Tuple)和字典(Dict)的一些认识,以及部分内置方法的介绍。下面话不多说,来看看详细的介绍吧。
元祖 Tuple
特点:元祖内的数据不可变
一个元素的定义:T = (1,)
1
2
3
|
>>> T = ( 1 ,)
>>> type (T)
< type 'tuple' >
|
特殊的元祖:”可变”的元祖
1
2
3
4
|
>>> 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可变,将会导致数据混乱。
1
2
3
|
>>> D = { 1 : 3 , 'vimiix' : 88 }
>>> type (D)
< type 'dict' >
|
1
2
3
4
5
6
|
>>> 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 是可变的数据类型)
>>>
|
由此错误可以看出,字典的键只能使用不可变的对象(元祖是可以的),但是对于字典的值没有此要求
键值对用冒号‘:'分割,每个对之间用逗号‘,'分开,所有这些用花括号‘{}'包含起来
字典中的键值对是没有顺序的,故不可以用索引访问,只可以通过键取得所对应的值
拓展:如果定义的过程中,出现相同的键,最后存储的时候回保留最后的一个键值对)
1
2
3
|
>>> D = { 1 : 2 , 1 : 3 }
>>> D
{ 1 : 3 }
|
创建与访问
第一种创建方式:直接通过花括号包含键值对来创建
第二种创建方式:利用内置函数dict()
来创建,注意!dict()
括号内只能有一个参数,要把所有的键值对括起来
(1)
1
2
3
4
5
6
7
8
|
>>> 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)还可以指定关键字参数
1
2
3
|
>>> D = dict (vimiix = 'VIMIIX' )
>>> D
{ 'vimiix' : 'VIMIIX' }
|
这里的小写‘vimiix'不可以加单引号,加了会报错!
(3)dict的内置方法 .fromkeys 有两个参数
1
2
3
4
|
>>> D = dict .fromkeys(( 1 , 'vimiix' ),( 'common' , 'value' ))
>>> D
{ 1 : ( 'common' , 'value' ), 'vimiix' : ( 'common' , 'value' )}
>>>
|
实际的生产过程中,都是使用字典生成式来创建,根据现有的数据来生成对应的数据,有数据才有意义。
字典生成式栗子:
1
2
3
4
5
|
>>> 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()
:
更新或者新增一个键值对(有则改之无则加勉)
1
2
3
|
>>> 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