课时25:字典:当索引不好用时
目录:
一 、字典(哈希、关系数组)
二、创建和访问字典
三、课时25课后习题及答案
*********************************
一 、字典(哈希、关系数组)
*********************************
在Python中也有字典,又称为哈希(hash),有些地方称为关系数组。
字典是Python中唯一的映射类型,映射是数学上的一个术语,指的是两个元素集合之间元素相互“对应”关系,如下图所示:
映射类型区别于序列类型,序列类型一数组的形式存储,通过索引的方式来获取相应位置的值,一般索引值与对应位置存储的数据是毫无关系的。举个例子:
>>> brand = ["李宁","耐克","阿迪达斯","鱼C工作室"] >>> slogan = ["一切皆有可能","Just do it","Impossible is nothing","让编程改变世界"] >>> print("鱼C工作号的口号是:",slogan[brand.index("鱼C工作室")]) 鱼C工作号的口号是: 让编程改变世界
列表brand和slogan的索引和相对的值是没有任何关系的,可以看出,唯一有关系的就是两个列表之间,索引号相同的元素是有关系的(品牌对应口号嘛),所以这里通过“brand.index("鱼C工作室")”这样的语句,间接地实现通过品牌查找对应口号的功能。这种方式有点差强人意,所以,需要有字典这种映射类型的出现。
***********************
二、创建和访问字典
***********************
先演示下用法:
>>> dict1 = {"李宁":"一切皆有可能","耐克":"Just do it","阿迪达斯":"Impossible is nothing","鱼C工作室":"让编程改变世界"} >>> dict1 {'李宁': '一切皆有可能', '耐克': 'Just do it', '阿迪达斯': 'Impossible is nothing', '鱼C工作室': '让编程改变世界'} >>> print("鱼C工作号的口号是:",dict1['鱼C工作室']) 鱼C工作号的口号是: 让编程改变世界
字典的使用非常简单,它有自己的标志性符号,就是用大括号( { } )定义。字典由多个键及其对应的值共同构成,每一对键值组合称为项。在刚才的例子中,“李宁”“耐克”“阿迪达斯“”鱼C工作室”这些品牌就是键,而"一切皆有可能","Just do it","Impossible is nothing","让编程改变世界"这些口号就是对应的值。也许细心的你发现了:字典中的项跟创建的顺序不一样的?没错,字典跟序列不同,序列讲究顺序,字典讲究映射,不讲顺序。
另外,需要注意的是:字典的键必须是独一无二的,而值可以取任何数据类型,但必须是不可变的(如字符串、数或元组)。
要申明一个空字典,直接用大括号即可:
>>> empty = {} >>> empty {} >>> type(empty) <class 'dict'>
你也可以用dict()来创建字典:
>>> dict1 = dict((('F',70),('i',105),('s',115),('h',104),('c',67))) >>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}
为什么会有这么多的括号呢?
因为dict()函数的参数可以是一个序列(但不能是多个),所以要打包成一个元组序列(列表也可以)。当然,如果嫌上面的做法太麻烦,还可以通过提供具有映射关系的参数来创建字典:
>>> dict1 = dict(F=70,i=105,s=115,h=104,c=67) >>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}
这里要注意的是键的位置不能加上字符串的引号,否则会报错:
>>> dict1 = dict('F'=70,'i'=105,'s'=115,'h'=104,'c'=67) SyntaxError: keyword can't be an expression
还有一种创建的方法是直接给字典赋值,如果键存在,则改写键对应的值;如果不存在,则创建一个新的键并赋值:
>>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67} >>> dict1['x'] = 88 >>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67, 'x': 88} >>> dict1['x'] = 120 >>> dict1 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67, 'x': 120}
正所谓殊途同归,下面列举的五种方法都是创建同样的字典,我们好好的体会下:
>>> a = dict(one = 1,two = 2,three = 3) >>> b = {'one':1,'two':2,'three':3} >>> c = dict(zip(['one','two','three'],[1,2,3])) >>> d = dict([('two',2),('one',1),('three',3)]) >>> e = dict({'three':3,'one':1,'two':2}) >>> a == b == c == d == e True >>> a {'one': 1, 'two': 2, 'three': 3} >>> b {'one': 1, 'two': 2, 'three': 3} >>> c {'one': 1, 'two': 2, 'three': 3} >>> d {'two': 2, 'one': 1, 'three': 3} >>> e {'three': 3, 'one': 1, 'two': 2}
*******************************
三、课时25课后习题及答案
*******************************