7.3.2 映射类型相关的函数
dict() 如果参数是可以迭代的,即一个序列,或是一个迭代器,或是一个支持迭代的对象,则每个可迭代的元素必须成对出现。
如果输入参数是另一个映射对象,新生成的字典是原来字典对象的浅复制版本,它与用字典的内建方法copy()生成的字典对象是一样的。
>>> dict([[1,2],[2,3],[3,4]])
{1: 2, 2: 3, 3: 4}
>>> dict1 = {1:"a", 2:"b"}
>>> dict2 = dict1
>>> dict2
{1: 'a', 2: 'b'}
>>>
len() 返回所有元素键值对的数目。
hash() 可以判断某个对象是否可以做一个字典的键。将一个对象作为参数传递给hash(),会返回这个对象的哈希值。只有这个对象是可哈希的,才可以作为字典的键。
>>> hash(1000)
1000
>>> hash('123')
1911471187
>>> hash((1,2,3))
-378539185
>>>
7.4 映射类型的内建方法
keys() 返回一个列表,包含字典中所有的键
values() 返回一个列表,包含字典中的所有值
items 返回一个包含所有元组的列表。
这些方法在不按任何顺序遍历字典的键或值时很有用。
update() 可以用来将一个字典的内容添加到另外一个字典中。字典中原有的键如果与新添加的键重复,那么重复键所对应的原有条目的值将被新键所对应的值所覆盖。原来没有的条目则被添加到字典中。
clear() 可以用来删除字典中所有的条目。
>>> dict1 = {1:"a", 2:"b"}
>>> dict1.keys()
[1, 2]
>>> dict1.values()
['a', 'b']
>>> dict1.items()
[(1, 'a'), (2, 'b')]
>>> dict1.update({1:"Z", 3:"r"})
>>> dict1
{1: 'Z', 2: 'b', 3: 'r'}
>>> dict1.clear()
>>> dict1
{}
>>>
copy()方法返回一个字典的副本。注意这只是浅复制。
get()方法和键查找操作符[]类似,不同的是它允许你为不存在的键提供默认值。如果该键不存在也未给出它的默认值,则返回None。此方法比采用键查找更灵活,因为不必担心键不存在而引发异常。
>>> dict1 = {1:"a", "2":"d", "3":"e", 4:"aa"}
>>> dict1.get("2")
'd'
>>> dict1.get("4")
>>> dict1.get("4", 'None')
'None'
>>>
setdefault()检查字典中是否含有某键。如果字典中这个键存在,你可以取到它的值。如果所找的键在字典中不存在,你可以给这个键赋默认值并返回此值。
>>> dict1 = {1:"a", "2":"d", "3":"e", 4:"aa"}
>>> dict1.setdefault("4", "None")
'None'
>>> dict1.setdefault(4, "None")
...
'aa'
>>>
7.5 字典的键
7.5.1 不允许一个键对应多个值
每个键只能对应一个项。
7.5.2 键必须可哈希的
大多数Python对象可以用作键;但它们必须是可哈希的对象。像列表和字典这样的可变类型,由于它们不是可哈希的,所以不能作为键。
所有不可变的类型都是可哈希的,因此他们都可以作为字典的键。值相等的数字表示相同的键。
用元组做有效的键,必须要加限制:元组中只包括像数字和字符串这样的不可变参数,才可以作为字典中有效的键。