这篇日志在2011-10-31 01:39:45最后一次修订。
首先要说明,这套笔记不是我整理
有朋友知道原文出去麻烦告知一声,谢谢
映射和集合类型(chapter7)
- 字典使用keys()获得键的列表, values()获得值的列表, items()获得包含key->value对的元组的列表
-
字典的创建和赋值
-
dict = {key: value}
-
dict = dict((key, value), (key, value))
-
dict.fromkeys(sequence_keys, default_value)
创建一个key是sequence_keys中元素的字典, 所有的value都是default_value, 如果不指定default_value, 默认是None
-
-
使用
dict.has_key()
可以判断一个字典中是否有这个键, 该方法在后期python可能弃用, 推荐使用in和not in
- 字典的键必须是可哈希的
- print中使用到字典的时候, 使用字符串格式化方式是非常优雅的
-
dict1.update(dict2 | tuple_list[, **key=value])
- 将dict2字典更新到dict1中
- 如果参数是一个元组列表, 将元组列表解析到dict1中(元组列表中每个元组必须有两个元素)
- 可以在参数后面跟0—n个关键字参数, 以参数名: value的方式更新到dict1中
-
元素的删除
-
del dict["key"]
删除键是key的条目
-
dict.clear()
清空字典内的内容
-
dict.pop("name")
删除键是key的条目并返回
-
-
映射类型操作符
- 标准类型操作符: <, >等比较操作符可以使用, 在比较过程中, 还是调用了字典的cmp方法, 但是, 字典的cmp方法中指示, 首先比较字典的长度, 然后比较键的大小, 最后比较值的大小
- 字典查找操作: [], 成员关系操作: in, not in
-
dict工厂函数
-
接受不定关键字参数:
dict(a = 1, b = 2, c = 3)
- 接受字典或关键字参数: 将原有的字典拷贝出来成为一个新的字典(这里使用的浅拷贝, 这里的浅拷贝得到的结果和使用copy函数得到的结果是一样的,但是, copy函数的效率更高)
-
dict_instance.copy()
使用已有的字典拷贝一个字典(这里使用的也是浅拷贝)
-
接受不定关键字参数:
-
系统内建函数
- len(): 返回字典的key-value对的数目
- hash(): 这个函数不是为字典设计的, 但是它可以判断某个对象是否可以做一个字典的键, 将一个对象作为参数传递给hash(), 会返回这个对象的哈希值. 如果对象是不可哈希的, 会返回TypeError, 提示该对象是unhashable的
- sorted(dict): 返回dict的所有key排序后的列表
-
dict类型的内建方法
- keys(): 返回字典的所有key的列表
- values(): 返回字典的所有value的列表
- items(): 返回字典的所有key-value的元组的列表
- get(key, default = None): 获取字典内key对应的值, 如果没有该key, 返回default指定的默认值
- setdefault(key, default=None): 如果字典中不存在key, 由dict[key]=default为其赋值
- iterkeys(), itervalues(), iteritems() 对应没有iter命名的方法, 这里使用了惰性赋值的迭代器, 节省内存
- 数字作为字典的键的时候, 只要值相同, 就代表相同的键, 比如, 1, 和1.0代表的就是相同的键
- 键必须是可哈希的, 所有的不可变对象都是可哈希的, 可变对象如果在定义中定义了__hash__()方法, 那么就可以作为键
- 如果元组中的值都是不可变类型的, 那么元组也可以作为字典的键
- 集合sets有两种不同的类型, 可变集合set和不可变集合frozenset…可变集合也是不可哈希的…
- 集合中不能有重复的元素, 如果有元素和已有元素重复, 就不会被插入.集合是无序的, 但是, 可以使用排序函数为它排序
- 集合中可以使用的数学符号
- 集合只能使用工厂函数set和frozenset创建
- 访问集合中的数据使用循环, 或者使用成员关系操作符in, not in判断元素是否属于集合
-
更新集合(只能是set, frozenset不能被更新)
- add() 添加一个元素
- s.update() 接受一个序列类型的参数, 把该序列中有而集合中没有的元素添加到集合中
- s.remove() 从集合中移除一个元素
-
集合可用的标准类型操作符
- 成员关系: in, not in
- 集合等价/不等价: ==, !=
- 子集/超集: <, <=, >, >=
-
集合类型操作符(所有的集合类型) 集合互相操作的时候, 最后产生的集合是可变集合还是不可变集合取决于第一个参与操作的集合的类型
- 联合 |
- 交集 &
- 差补/相对补集 – A-B就返回属于A 但不属于B的元素集合
- 对称差分 ^ A^B = A-B + B-A
-
可变集合特有的操作符
- |= 相当于update方法, 并集赋值
- &= 相当于intersection_update()方法, 交集赋值
- -= 相当于difference_update()方法, 差集赋值
- ^= 相当于symmetric_difference_update()方法, 对称差分更新
-
集合类型的内部方法:
- s.issubset(t) 判断s是不是t的子集
- s.issuperset(t) 判断s是不是t的超集
- s.union(t) 返回一个新集合, 该集合是s和t的并集
- s.intersection(t) 返回一个新集合, 该集合是s和t的交集
- s.difference(t) 返回一个新集合, 该集合是s的成员, 但不是t的成员, 即返回s不同于t的元素
- s.symmetric_defference(t) 返回所有s和t独有的(非共同拥有)元素集合
- s.copy() 返回一个s的浅拷贝, 效率比工厂要好
- 可变集合特有的方法: add, remove, discard, pop, clear, 这些接受对象的方法, 参数必须是可哈希的
- 那些和操作符提供相同功能的函数, 有着更强的处理能力, 因为运算符两边的操作数必须都是集合, 然而函数可以接受任何的可迭代类型.


沙发。。。
真厉害 豆瓣就是这个语言写得