第7章 集合与映射类型
【本章导读】
集合类型和映射类型是Python中内置的两种数据类型,因两者都使用一对大括号“{}”作为数据的界定符,所以放在一起进行讲解。本章简单介绍了集合的创建和基本操作方法,通过实例讲授了集合在去除重复元素方面的应用和集合运算。详细讲授映射数据类型(字典)的创建、值的获取与修改、内置函数与方法以及排序等知识。通过实例讲授利用字典进行数据的查询和统计的方法。
【本章要点】
● 集合的定义与创建
class set([iterable])
class frozenset([iterable])
返回一个新的 set 或 frozenset 对象,其元素来自于 iterable。
集合的元素必须为 hashable
集合可用多种方式来创建:
使用花括号内以逗号分隔元素的方式: {'jack', 'sjoerd'}
使用集合推导式: {c for c in 'abracadabra' if c not in 'abc'}
使用类型构造器: set(), set('foobar'), set(['a', 'b', 'foo'])
● 集合的运算与应用
len(s)返回集合 s 中的元素数量(即 s 的基数)。
x in s检测 x 是否为 s 中的成员。
x not in s检测 x 是否非 s 中的成员。
isdisjoint(other)如果集合中没有与 other 共有的元素则返回 True。 当且仅当两个集合的交集为空集合时,两者为不相交集合。
issubset(other)
set <= other检测是否集合中的每个元素都在 other 之中。
set < other检测集合是否为 other 的真子集,即 set <= other and set != other。
issuperset(other)
set >= other检测是否 other 中的每个元素都在集合之中。
set > other检测集合是否为 other 的真超集,即 set >= other and set != other。
union(*others)
set | other | ...返回一个新集合,其中包含来自原集合以及 others 指定的所有集合中的元素。
intersection(*others)
set & other & ...返回一个新集合,其中包含原集合以及 others 指定的所有集合中共有的元素。
difference(*others)
set - other - ...返回一个新集合,其中包含原集合中在 others 指定的其他集合中不存在的元素。
symmetric_difference(other)
set ^ other返回一个新集合,其中的元素或属于原集合或属于 other 指定的其他集合,但不能同时属于两者。
copy() 返回原集合的浅拷贝。
可用于 set 而不能用于不可变的 frozenset 实例的操作:
update(*others)
set |= other | ...更新集合,添加来自 others 中的所有元素。
intersection_update(*others)
set &= other & ...更新集合,只保留其中在所有 others 中也存在的元素。
difference_update(*others)
set -= other | ...更新集合,移除其中也存在于 others 中的元素。
symmetric_difference_update(other)
set ^= other更新集合,只保留存在于集合的一方而非共同存在的元素。
add(elem)将元素 elem 添加到集合中。
remove(elem)从集合中移除元素 elem。 如果 elem 不存在于集合中则会引发 KeyError。
discard(elem)如果元素 elem 存在于集合中则将其移除。
pop()从集合中移除并返回任意一个元素。 如果集合为空则会引发 KeyError。
clear()从集合中移除所有元素。
● 字典的创建与修改
class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)
返回一个新的字典,基于可选的位置参数和可能为空的关键字参数集来初始化。
字典可用多种方式来创建:
使用花括号内以逗号分隔 键: 值 对的方式: {'jack': 4098, 'sjoerd': 4127} or {4098: 'jack', 4127: 'sjoerd'}
使用字典推导式: {}, {x: x ** 2 for x in range(10)}
使用类型构造器: dict(), dict([('foo', 100), ('bar', 200)]), dict(foo=100, bar=200)
● 字典的操作与方法
list(d) 返回字典 d 中使用的所有键的列表。
len(d) 返回字典 d 中的项数。
d[key] 返回 d 中以 key 为键的项。 如果映射中不存在 key 则会引发 KeyError。
d[key] = value 将 d[key] 设为 value。
del d[key] 将 d[key] 从 d 中移除。 如果映射中不存在 key 则会引发 KeyError。
key in d 如果 d 中存在键 key 则返回 True,否则返回 False。
key not in d 等价于 not key in d。
iter(d) 返回以字典的键为元素的迭代器。 这是 iter(d.keys()) 的快捷方式。
clear() 移除字典中的所有元素。
copy() 返回原字典的浅拷贝。
classmethod fromkeys(iterable[, value])使用来自 iterable 的键创建一个新字典,并将键值设为 value。
get(key[, default]) 如果 key 存在于字典中则返回 key 的值,否则返回 default。 如果 default 未给出则默认为 None,因而此方法绝不会引发 KeyError。
items() 返回由字典项 ((键, 值) 对) 组成的一个新视图。 参见 视图对象文档。
keys() 返回由字典键组成的一个新视图。 参见 视图对象文档。
pop(key[, default]) 如果 key 存在于字典中则将其移除并返回其值,否则返回 default。 如果 default 未给出且 key 不存在于字典中,则会引发 KeyError。
popitem() 从字典中移除并返回一个 (键, 值) 对。 键值对会按 LIFO 的顺序被返回。
reversed(d) 返回一个逆序获取字典键的迭代器。 这是 reversed(d.keys()) 的快捷方式。
setdefault(key[, default]) 如果字典存在键 key ,返回它的值。如果不存在,插入值为 default 的键 key ,并返回 default 。 default 默认为 None。
update([other]) 使用来自 other 的键/值对更新字典,覆盖原有的键。 返回 None。
values() 返回由字典值组成的一个新视图
d | other 合并 d 和 other 中的键和值来创建一个新的字典,两者必须都是字典。当 d 和 other 有相同键时, other 的值优先。
d |= other 用 other 的键和值更新字典 d ,other 可以是 mapping 或 iterable 的键值对。当 d 和 other 有相同键时, other 的值优先。
字典视图对象
len(dictview)返回字典中的条目数。
iter(dictview)返回字典中的键、值或项(以 (键, 值) 为元素的元组表示)的迭代器。
x in dictview如果 x 是对应字典中存在的键、值或项 则返回 True。
reversed(dictview)返回一个逆序获取字典键、值或项的迭代器。
● 字典的排序
sorted(iterable, *, key=None, reverse=False)
字典无序,可对字典键、值或键值对排序,返回值为列表
字典名或dict.keys()为参数可返回键的排序列表
dict.values()为参数可返回值的排序列表
dict.items()为参数可对列表元素进行排序,默认根据键值排序,key 参数结合lambda 表达式可根据值排序
● 集合与字典的应用
