chap 7 字典,集合
1. 映射类型,映射类型通常被称做哈希表的原因是字典对象就是哈希类型的。哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中来存储你的值。任何一个值存储的地址皆取决于它的键。正因为这种随意性,哈希表中的值是没有顺序的。
2. 创建: 直接创建或者通过工厂方法dict(),或者内建函数dict.fromkeys()
注:dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.v defaults to None.
访问: 迭代访问key,使用字典键加上中括号得到该键的值(判断字典是否包含这个key使用in或者not in还有has_key())
更新: 添加新的item,删除已经存在的item,修改一个item的value
删除: del dict2['name'] 删除键为“name”的条目
dict2.clear() 删除 dict2 中所有的条目
del dict2 删除整个 dict2 字典
dict2.pop('name') 删除并返回键为“name”的条目
3. 操作符
标准类型操作符
映射类型操作符:通过键值查询字典中的元素,也可以重新赋予新元素
4. 映射类型的内建函数和工厂函数
标准类型函数[type()、str()和 cmp()] (cmp()是先比较字典长度,然后比较字典的键,再比较字典的值)
映射类型相关的函数
(1)dict()工厂函数:当容器类型对象做为一个参数传递给方法 dict() 时很有意思。如果参数是可以迭代的,即,一个序列,或是一个迭代器,或是一个支持迭代的对象,那每个可迭代的元素必须成对出现。在每个值对中,第一个元素是字典的键、第二个元素是字典中的值。
如果dict()的输入参数是(另)一个映射对象,比如,一个字典对象,对其调用 dict()会从存在的字典里复制内容来生成新的字典。新生成的字典是原来字典对象的浅复制版本, 它与用字典的内建方法copy() 生成的字典对象是一样的。
(2)len()它会返回所有元素(键-值对)的数目
(3)hash()它可以判断某个对象是否可以做一个字典的键,只有这个对象是可哈希的,才可作为字典的键。如果非可哈希类型作为参数传递给 hash()方法,会产生 TypeError 错误
5. 映射类型的内建方法
has_key(),in,not in,keys(),values(),items()
dict.clear() 删除字典中所有元素
dict.copy() 返回字典(浅复制)的一个副本
dict.fromkeys(seq,
val=None) 创建并返回一个新字典,以 seq 中的元素做该字典的键,val 做该字典中所有键对应的初始值(如果不提供此值,则默认为 None)
dict.get(key,
default=None) 对字典 dict 中的键 key,返回它对应的值 value,如果字典中不存在此键,则返回 default 的值(注意,参数 default 的默认值为 None)
dict.has_key(key) 如果键(key)在字典中存在,返回 True,否则返回 False. 在 Python2.2版本引入 in 和 not in 后,此方法几乎已废弃不用了,但仍提供一个可工作的接口
dict.items() 返回一个包含字典中(键, 值)对元组的列表
dict.keys() 返回一个包含字典中键的列表
dict.items() 返回一个包含字典中(键, 值)对元组的列表
dict.iter() 方法 iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表。
dict.pop(key
[, default]) 和方法 get()相似,如果字典中 key 键存在,删除并返回 dict[key],
如果 key 键不存在,且没有给出 default 的值,引发 KeyError 异常
dict.setdefault(key,
default=None) 和方法set()相似,如果字典中不存在key键,由dict[key]=default为它赋值。
dict.update(dict2) 将字典 dict2 的键-值对添加到字典 dict
dict.values() 返回一个包含字典中所有值的列表
6. 集合类型:set(可变集合)frozenset(不可变集合)如你所想,对可变集合(set),你可以添加和删除元素,对 不可变集合(frozenset)则不允许这样做。可变集合(set)不是可哈希的,因此既不能用做字典的键也不能做其他集合中的元素。不可变集合(frozenset)则正好相反,即,他们有哈希值,能被用做字典的键或是作为集合中的一个成员。
7. 集合运算符:
in 是...的成员
not in 不是...的成员
== 等于
!= 不等于
< 是...的严格子集
<= 是...的子集(包含非严格子集)
> 是...的严格超集
>= 是...的超集(包括非严格超集)
& 交集
| 合集
- 差补或相对补集
^ 对称差分
1. 映射类型,映射类型通常被称做哈希表的原因是字典对象就是哈希类型的。哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中来存储你的值。任何一个值存储的地址皆取决于它的键。正因为这种随意性,哈希表中的值是没有顺序的。
2. 创建: 直接创建或者通过工厂方法dict(),或者内建函数dict.fromkeys()
注:dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.v defaults to None.
访问: 迭代访问key,使用字典键加上中括号得到该键的值(判断字典是否包含这个key使用in或者not in还有has_key())
更新: 添加新的item,删除已经存在的item,修改一个item的value
删除: del dict2['name'] 删除键为“name”的条目
dict2.clear() 删除 dict2 中所有的条目
del dict2 删除整个 dict2 字典
dict2.pop('name') 删除并返回键为“name”的条目
3. 操作符
标准类型操作符
映射类型操作符:通过键值查询字典中的元素,也可以重新赋予新元素
4. 映射类型的内建函数和工厂函数
标准类型函数[type()、str()和 cmp()] (cmp()是先比较字典长度,然后比较字典的键,再比较字典的值)
映射类型相关的函数
(1)dict()工厂函数:当容器类型对象做为一个参数传递给方法 dict() 时很有意思。如果参数是可以迭代的,即,一个序列,或是一个迭代器,或是一个支持迭代的对象,那每个可迭代的元素必须成对出现。在每个值对中,第一个元素是字典的键、第二个元素是字典中的值。
如果dict()的输入参数是(另)一个映射对象,比如,一个字典对象,对其调用 dict()会从存在的字典里复制内容来生成新的字典。新生成的字典是原来字典对象的浅复制版本, 它与用字典的内建方法copy() 生成的字典对象是一样的。
(2)len()它会返回所有元素(键-值对)的数目
(3)hash()它可以判断某个对象是否可以做一个字典的键,只有这个对象是可哈希的,才可作为字典的键。如果非可哈希类型作为参数传递给 hash()方法,会产生 TypeError 错误
5. 映射类型的内建方法
has_key(),in,not in,keys(),values(),items()
dict.clear() 删除字典中所有元素
dict.copy() 返回字典(浅复制)的一个副本
dict.fromkeys(seq,
val=None) 创建并返回一个新字典,以 seq 中的元素做该字典的键,val 做该字典中所有键对应的初始值(如果不提供此值,则默认为 None)
dict.get(key,
default=None) 对字典 dict 中的键 key,返回它对应的值 value,如果字典中不存在此键,则返回 default 的值(注意,参数 default 的默认值为 None)
dict.has_key(key) 如果键(key)在字典中存在,返回 True,否则返回 False. 在 Python2.2版本引入 in 和 not in 后,此方法几乎已废弃不用了,但仍提供一个可工作的接口
dict.items() 返回一个包含字典中(键, 值)对元组的列表
dict.keys() 返回一个包含字典中键的列表
dict.items() 返回一个包含字典中(键, 值)对元组的列表
dict.iter() 方法 iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表。
dict.pop(key
[, default]) 和方法 get()相似,如果字典中 key 键存在,删除并返回 dict[key],
如果 key 键不存在,且没有给出 default 的值,引发 KeyError 异常
dict.setdefault(key,
default=None) 和方法set()相似,如果字典中不存在key键,由dict[key]=default为它赋值。
dict.update(dict2) 将字典 dict2 的键-值对添加到字典 dict
dict.values() 返回一个包含字典中所有值的列表
6. 集合类型:set(可变集合)frozenset(不可变集合)如你所想,对可变集合(set),你可以添加和删除元素,对 不可变集合(frozenset)则不允许这样做。可变集合(set)不是可哈希的,因此既不能用做字典的键也不能做其他集合中的元素。不可变集合(frozenset)则正好相反,即,他们有哈希值,能被用做字典的键或是作为集合中的一个成员。
7. 集合运算符:
in 是...的成员
not in 不是...的成员
== 等于
!= 不等于
< 是...的严格子集
<= 是...的子集(包含非严格子集)
> 是...的严格超集
>= 是...的超集(包括非严格超集)
& 交集
| 合集
- 差补或相对补集
^ 对称差分