Python核心编程(第二版)第7章 映像和集合类型


 

7.1 映射类型:字典

字典是Python语言中唯一的映射类型。

一个字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也包括其他容器类型。

字典类型和序列类型容器类的区别是存储和访问数据的方式不同。序列类型只用数字类型的键。映射类型也可以用其他对象类型做键,一般常见的是用字符串做键。和序列类型的键不同,映像类型的键直接或间接地和存储的数据值相关联。

映像类型中的数据是无序排列的。

映射类型通常被称做哈希表,是因为字典对象就是哈希类型的。

你所能获得的有序集合只能是字典中的键的集合或值的集合。方法Keys()或values()返回一个列表,该列表是可排序的。你还可以用items()方法得到包含键、值对的元组的列表来排序。由于字典本身是哈希的,所以是无序的。

多条字典条目被包含在大括号({})里。

7.1.1如何创建字典和给字典赋值

可以用工厂方法dict()来创建字典,也可以用一个很方便的内建方法fromkeys()来创建一个"默认"字典。

>>> dict1 = dict((("1th", "Runrun"),("2th", "Jing"), ("3th", "Qing")))

>>> dict1["1th"]

'Runrun'

>>> dict2 = {}.fromkeys(("Address", "Hometown"),"Yantai")

>>> dict2["Address"]

'Yantai'

>>>

7.1.2如何访问字典中的值

可以用keys()方法获取供循环使用的键值列表,也可以用迭代器来轻松访问类序列对象,比如字典和文件。

>>> for key in dict1.keys():

... print key, dict1[key]

...

3th Qing

2th Jing

1th Runrun

>>> for key in dict2:

... print key, dict2[key]

...

Hometown Yantai

Address Yantai

>>>

检查一个字典中是否用某个键的最好方法是用字典的has_key()方法,或者另一种比较好的方法in或not in操作符。

在执行中字典中的键不允许被改变,字典中的键必须是可哈希的,所以数字和字符串和以作为字典中的键,但是列表和其他字典不行。

>>> dict1.has_key("4th")

False

>>> "Address" in dict2

True

>>>

7.1.3如何更新字典

几种方式对一个字典做修改:1)添加一个新数据项或新元素, 2)修改一个已存在的数据项, 3)删除一个已存在的数据项。

>>> print "1th:%(1th)s 2th:%(2th)s 3th:%(3th)s"%dict1

1th:Runrun 2th:Jing 3th:Qing

>>>

如果字典中该键已经存在,则字典中该键对应的值将被新值替代,上面的print语句展示了另一种在字典中使用字符串格式符(%)的方法。也可以用内建方法update()将整个字典的内容添加到另一个字典。

7.1.4如何删除字典元素和字典

del语句

>>> del dict2["Hometown"]

>>> dict2

{'Address': 'Yantai'}

>>> del dict1

>>> dict1 www.2cto.com

Traceback (most recent call last):

  File "<interactive input>", line 1, in <module>

NameError: name 'dict1' is not defined

>>>

7.2 映射类型操作符

字典不支持像拼接和重复这样的操作。

7.2.1标准类型操作符

与列表,元组类似

7.2.2映射类型操作符

1. 字典的键查找操作符([])

键查找操作符既可以用于给字典赋值,也可以用于从字典中取值。

2. 键成员关系操作(in、not in)

用in和not in操作符来检查某个键是否存在于字典中。

7.3 映射类型的内建函数和工厂函数

7.3.1标准类型函数[type()、str()和cmp()]

字典通过这样的算法来比较的:首先是字典的大小,然后是键,最后是值。

 

摘自:xufei96的专栏

相关内容

    暂无相关文章

评论关闭