目录
一、字典(哈希、关系数组)
二、创建和访问字典
一、字典(哈希、关系数组)
在Python中也有字典,又称为哈希hash,关系数组
字典是Python中唯一的映射类型,映射是数学上的一个术语,指的是两个元素集合之间元素相互‘对应’关系,如图所示:
映射类型区别于序列类型,序列类型以数组的形式进行存储,通过索引的方式来获取相对应位置的值,一般索引值与对应位置存储的数据是毫无关系的,例如:
>>> band = ['李宁','耐克','阿迪达斯','工作室']
>>> slogan = ['一切皆有可能','just do it','impossible is nothing','让编程改变世界']
>>> print('工作室的口号是:',slogan[band.index('工作室')])
工作室的口号是: 让编程改变世界
列表band和slogan的索引和相对应的值是没有任何关系的。唯一可以看出的是两个列表,索引号相同的元素是有关系的(品牌对应的slogan)。所以通过band.index('工作室')语句,间接的通过品牌查找对应口号的功能。
所以,需要有字典这种映射类型的出现
二、创建和访问字典
- 直接创建字典,key:value,中间用逗号隔开
字典的使用非常简单,它有标志性符号:大括号{}定义。字典由多个键以及对应的值共同构成,每一对键值组合称为项。注意:字典和序列不同,序列讲究顺序,字典讲究映射,不讲顺序
>>> dict1 = {'李宁':'一切皆有可能','耐克':'just do it','阿迪达斯':'impossible is nothing','工作室':'让编程改变世界'}
>>> print('工作室的口号是:',dict1['工作室'])
工作室的口号是: 让编程改变世界
字典的键必须是独一无二的,值可以取任何数据类型,但必须是不可变的(如字符串,数字或元组)
下面的例子也可以看出,字典支持index索引
>>> dict2 = {1:'one',2:'two',3:'three'}
>>> dict2
{1: 'one', 2: 'two', 3: 'three'}
>>> dict2[2]
'two'
定义一个空字典,直接用一对大括号即可
>>> dict3 ={}
>>> dict3
{}
- 使用dict()创建字典
注意这里面的很多括号。因为dict的参数可以是一个序列,但不能是多个,所以要打包一个元组序列(列表也可以)
>>> dict3 = dict((('F',70),('i',105),('s',115),('h',104)))
>>> dict3
{'F': 70, 'i': 105, 's': 115, 'h': 104}
- 使用dict()创建字典,但使用提供映射关系的参数来创建字典
注意此时键的位置不可以加上字符串的引号,否则会报错
>>> dict4 = dict(小甲鱼='让编程改变世界',孔子='知之为知之不知为不知')
>>> dict4
{'小甲鱼': '让编程改变世界', '孔子': '知之为知之不知为不知'}
>>> dict4 = dict('小甲鱼'='让编程改变世界','孔子'='知之为知之不知为不知')
SyntaxError: keyword can't be an expression
- 直接给字典赋值
如果键存在,则改写键对应的值:如果键不存在,则新建一个新的键并赋值
>>> dict4
{'小甲鱼': '让编程改变世界', '孔子': '知之为知之不知为不知'}
>>> dict4['孔子']='三人行必有我师'
>>> dict4
{'小甲鱼': '让编程改变世界', '孔子': '三人行必有我师'}
>>> dict4['李宁']='一切皆有可能'
>>> dict4
{'小甲鱼': '让编程改变世界', '孔子': '三人行必有我师', '李宁': '一切皆有可能'}
- 多种创建方法
>>> a = dict(one = 1,two = 2)
>>> b = {'one':1,'two':2}
>>> c = dict(zip(['one','two'],[1,2]))
>>> d = dict([('one',1),('two',2)])
>>> e = dict({'one':1,'two':2})
>>> a == b == c == d == e
True
>>> a
{'one': 1, 'two': 2}
>>> b
{'one': 1, 'two': 2}
>>> c
{'one': 1, 'two': 2}
>>> d
{'one': 1, 'two': 2}
>>> e
{'one': 1, 'two': 2}
>>>