字典和集合:
Python的字典就是C语言中的哈希表,每一条数据有两个属性:key(键) 和 value(值)。 合在一起被称为key-value pairs(键值对)。值存储的位置取决于键的哈希值。字典是无序的集合。可以通过键直接访问值。Python中字典用{}(大括号)标识。例:dic={‘url’:’www.python.com’,’port’:’80’},每个键值对的键和值用:(冒号)分隔,键值对之间用,(逗号)分割。字典中的键必须是唯一并且可哈希的, 所以数字和字符串可以作为字典中的键, 但是列表和其他字典不行。一个实现了__hash__() 特殊方法的类是可哈希的。
访问字典:
>>> dict2 = {'name': 'earth','port': 80}
>>>
>>>> for key in dict2.keys():
... print 'key=%s, value=%s' % (key, dict2[key])
...
key=name, value=earth
key=port, value=80
添加字典项:
dic={}
dic[‘1’]=’name’
dic[2]=age
删除字典:
del dic[‘key1’] 删除键值为key1的条目
dic.clear() 清空所有条目
del dic 删除字典
dic.pop(‘key1’) 删除并返回键值为key1的条目。
创建字典:
工厂函数dict(obj)obj为可迭代对象,对象的每个成员是由成对出现的元素构成。如:[(1,’a’),(2,’b’)] 或([1,’a’],[2,’b’])
字典内建函数:
len(dicobj): 返回字典对象的长度,条目个数。
dicobj.copy():复制一个字典: d=dicobj.copy()
hash(obj):判断一个对象是否可哈希。
dict.cleara () 删除字典中所有元素
dict.copya () 返回字典(浅复制)的一个副本
dict.fromkeysc (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.iter( 方法 iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法
一样,不同的是它们返回一个迭代子,而不是一个列表。
dict.popc (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() 返回一个包含字典中所有值的列表
集合类型
集合对象是一组无序排列的可哈希的值。是的,集合成员可以做字典中的键。数学集合转为 Python 的集合对象很有效,集合关系测试和 union、intersection 等操作符在 Python 里也同样如我们所预想地那样工作。
集合操作
objin/not in set : 判断obj是否属于集合
set1== set2: 等于
set1!= set2: 不等于
set1 < set2:set1是set2的严格子集
set1 <= set2: set1是set2的子集(包括非严格子集)
set1> set2: set1是set2的严格超集
set1>= set2: set1是set2的超集(包括非严格超集)
set1& set2: 交集
set1| set2: 并集
set1- set2: 差补或相对补集。两个集合(s 和t)的差补或相对补集是指一个集合 C,该集合中的元素,只属于集合 s,而不属于集合 t。
set1^set2:对称差分。两个集合(s 和t)的对称差分是指另外一个集合 C,该集合中的元素,只能是属于集合 s 或者集合t的成员,不能同时属于两个集合。
集合只能通过工厂函数来创建:set()可变集合。frozenset()不可变集合
s=set(‘abcde’)
s=frozenset(‘abcd’)
可变集合的操作:
添加:setobj.add(memberobj),每次添加一个成员
更新:setobj.update(obj)。 将obj转换为集合,然后添加到当前集合中。相当于setobj.update(set(obj))
删除:setobj.remove(memberobj) 每次删除一个成员。
另一种删除操作:setobj -= setobj1
删除集合对象:
delsetobj
集合类型方法
方法名称 操作
s.issubset(t) 如果 s 是 t 的子集,则返回 True,否则返回 False
s.issuperset(t) 如果 t 是 s 的超集,则返回 True,否则返回 False
s.union(t) 返回一个新集合,该集合是 s 和 t 的并集
s.intersection(t) 返回一个新集合,该集合是 s 和 t 的交集
s.difference(t) 返回一个新集合,该集合是 s 的成员,但不是 t 的成员
s.symmetric_difference(t)返回一个新集合,该集合是 s 或 t的成员,但不是 s 和 t共有的成员
s.copy() 返回一个新集合,它是集合 s 的浅复制
可变集合类型的方法
方法名 操作
s.update(t) 用 t 中的元素修改 s, 即,s 现在包含 s 或 t 的成员
s.intersection_update(t) s 中的成员是共同属于 s 和 t 的元素。
s.difference_update(t) s 中的成员是属于 s 但不包含在 t 中的元素
s.symmetric_difference_update(t)s 中的成员更新为那些包含在 s 或 t中,但不 是 s 和 t 共有的元素
s.add(obj) 在集合 s 中添加对象 obj
s.remove(obj) 从集合 s 中删除对象 obj;如果 obj 不是集合 s 中的元素(obj not
ins),将引发KeyError 错误
s.discard(obj) 如果 obj 是集合 s 中的元素,从集合 s 中删除对象 obj;
s.pop() 删除集合 s 中的任意一个对象,并返回它
s.clear() 删除集合 s 中的所有元素
(Union)Update ( |= )
这个更新方法从已存在的集合中添加(可能多个)成员,此方法和 update()等价.
保留/交集更新( &= )
保留(或交集更新)操作保留与其他集合的共有成员。此方法和 intersection_update()等价.
差更新 ( –= )
对集合 s 和 t 进行差更新操作 s-=t,差更新操作会返回一个集合,该集合中的成员是集合 s 去除掉集合 t 中元素后剩余的元素。此方法和 difference_update()等价.
对称差分更新( ^= )
对集合 s 和 t 进行对称差分更新操作(s^=t),对称差分更新操作会返回一个集合,该集合中的成员仅是原集合 s 或仅是另一集合 t 中的成员。此方法和 symmetric_difference_update()等价.