python 核心编程(第二版)——映射和集合类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 核心编程(第二版)——映射和集合类型相关的知识,希望对你有一定的参考价值。
1.字典
字典是Python 语言中唯一的映射类型。映射类型对象里哈希值(键) 和指向的对象(值)是一对多的关系。一个字典对象是可变的,它是一个容器类型,能存储任意个数的Python 对象,其中也包括其他容器类型。字典类型和序列类型容器类(列表、元组)的区别是存储和访问数据的方式不同。序列类型只用数字类型的键(从序列的开始起按数值顺序索引)。映射类型可以用其他对象类型做键;一般最常见的是用字符串做键(keys)。和序列类型的键不同,映射类型的键(keys)直接,或间接地和存储的数据值相关联。但因为在映射类型中,我们不再用"序列化排序"的键(keys),所以映射类型中的数据是无序排列的。
核心笔记:什么是哈希表?它们与字典的关系是什么?
序列类型用有序的数字键做索引将数据以数组的形式存储。一般,索引值与所存储的数据毫无关系。还可以用另一种方式来存储数据:基于某种相关值,比如说一个字符串。哈希表是一种数据结构:它按照我们所要求的去工作。哈希表中存储的每一条数据,叫做一个值(value),是根据与它相关的一个被称作为键(key)的数据项进行存储的。键和值合在一起被称为“键-值 对”(key-value pairs)。 哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中来存储你的值。任何一个值存储的地址皆取决于它的键。正因为这种随意性,哈希表中的值是没有顺序的。你拥有的是一个无序的数据集。
你所能获得的有序集合只能是字典中的键的集合或者值的集合。方法Keys() 或 values() 返回一个列表,该列表是可排序的。 你还可以用 items()方法得到包含键、值对的元组的列表来排序。由于字典本身是哈希的,所以是无序的。哈希表一般有很好的性能, 因为用键查询相当快。
一个字典条目的语法格式是 键:值。 而且,多条字典条目被包含在( { } ) 里。创建字典只需要把字典赋值给一个变量,不管这个字典是否包含元素。
从Python 2.2 版本起, 可以用工厂方法 dict() 来创建字典;
从Python 2.3 版本起, 可以用一个很方便的内建方法fromkeys() 来创建一个"默认"字典, 字典中元素具有相同的值 (如果没有给出, 默认为None)。如:ddict = {}.fromkeys((‘x‘, ‘y‘), -1);
要想遍历一个字典(一般用键), 你只需要循环查看它的键,ex:for key in dict2.keys();从Python 2.2开始,可以用迭代器来访问类序列对象,ex:for key in dict2(dict2为创建的字典);
要得到字典中某个元素的值, 可以用你所熟悉的字典键加上中括号来得到:ex dict2[‘name’];
检查一个字典中是否有某个键的最好方法是in 或 not in 操作符。
可以通过以下几种方式对一个字典做修改:
(1)添加一个新数据项或新元素(即,一个键-值对);
(2)修改一个已存在的数据项;
(3)或删除一个已存在的数据项。
1 >>> dict2[‘name‘] = ‘venus‘ # 更新已有条目 2 >>> dict2[‘port‘] = 6969 # 更新已有条目 3 >>> dict2[‘arch‘] = ‘sunos5‘# 增加新条目 4 >>> 5 >>> print ‘host %(name)s is running on port %(port)d‘ %dict2 6 host venus is running on port 6969
上面的print 语句展示了另一种在字典中使用字符串格式符( %)的方法。用字典参数可以简化print 语句,因为这样做你只须用到一次该字典的名字,而不用在每个元素出现的时候都用元组参数表示。
以上是关于python 核心编程(第二版)——映射和集合类型的主要内容,如果未能解决你的问题,请参考以下文章