字典用法
比较大小
Ⅰ 如果字典的长度不同,用cmp(dict1,dict2)比较大小时,如果字段dict1比dict2长,cmp()返回正直,如果dict2比dict1长,则返回负值,字典的键越多这个字典就越大
Ⅱ 如果两个字典的长度相同,那就按字典的键比较,键比较的顺序和keys()方法返回键的顺序相同
Ⅲ 如果两个字典的长度相同而且他们的键也匹配,则用字典中每个相同的键所对应的值进行比较,一旦出现不匹配的值,就对这两个值进行直接比较
Ⅳ 如果字典有相同的长度,相同的键,每个键也对应相同的值,则字典完全匹配,返回0值
>>> dict([['x',1],['y',2]])
{'x': 1, 'y': 2}
>>> dict([('xy'[i-1],1) for i in range(1,3)])
{'x': 1, 'y': 1}
>>> dict(x=1,y=2)
{'x': 1, 'y': 2}
>>> dict1=dict(x=1,y=2)
>>> dict1
{'x': 1, 'y': 2}
>>> dict2=dict(**dict1)
>>> dict2
{'x': 1, 'y': 2}
>>> dict3=dict2.copy()
>>> dict3
{'x': 1, 'y': 2}
>>> len(dict3)
2
>>> dict2.keys()
dict_keys(['x', 'y'])
>>> dict2.values()
dict_values([1, 2])
>>> dict2.items()
dict_items([('x', 1), ('y', 2)])
>>> for key in dict2.keys():
... print('dict2 key:', key, ' value:',dict2[key])
...
dict2 key: x value: 1
dict2 key: y value: 2
可用方法
字典方法 | 含义 |
---|---|
dict.clear() | 删除字典中所有元素 |
dict.copy() | 返回字典的一个副本 |
dict.fromkeys(seq,val=None) | 创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值(为提供默认为None) |
dict.get(key,default=None) | 对字典dict中的键key,返回它对于的值value,如果字典中不存在此键,则返回default的值(默认为None) |
dict.has_key(key) | 如果key在字典中存在,返回True,否则返回False |
dict.items() | 返回一个包含字典中键,值对元祖列表 |
dict.keys() | 返回一个包含字典中键的列表 |
dict.iter() | 方法iteritems(),iterkeys(),itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表 |
dict.pop(key[,default]) | 和方法get()相似,如果字典中key键存在,删除并返回dict[key],如果key键不存在,且没有给出default的值,引发keyError异常 |
dict.setdefault(key,default=None) | 如果字典中不存在key键,有dict[key]=default为它赋值 |
dict.update(dict2) | 将字典dict2的键-值对添加到字典dict |
dict.values() | 返回一个包含字典中所有值的列表 |
集合
集合(set)是一组无须排列的可哈希值,其值可以做字典中的键。集合(sets)本身有两种类型,可变集合(set)和不可变集合(frozenset),创建使用set()或frozenset。集合支持(in, not in,==,!=,>,>=,<,<=,|,&,-,^,|=,&=,-=,^=),加号不是集合类型的运算符,对于混合类型操作,如果左右两个操作数的类型相同,既都是可变集合或不可变集合,则产生的结果类型是相同的,如果左右两个操作数不同,则产生的操作类型与做操作数的类型相同。
>>> s=set('sky')
>>> s
{'k', 's', 'y'}
>>> v=frozenset('blue')
>>> v
frozenset({'b', 'u', 'e', 'l'})
>>> type(s)
<class 'set'>
>>> type(v)
<class 'frozenset'>
>>> len(v)
4
>>> s=set('sskkyy')
>>> s
{'k', 's', 'y'}
>>> len(s)
3
>>> 'k' in s
True
>>> s.add('E')
>>> s
{'k', 's', 'y', 'E'}
>>> v.add('A')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
>>> s.update('sk')
>>> s
{'k', 's', 'y', 'E'}
>>> s.update('skw')
>>> s
{'s', 'E', 'w', 'k', 'y'}
>>> s.remove('w')
>>> s
{'s', 'E', 'k', 'y'}
>>> s-=set('ky')
>>> s
{'s', 'E'}
>>> del s
>>> s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
集合类型操作符,函数和方法
函数/方法名 | 等价运算符 | 说明 |
---|---|---|
len(s) | 集合s中元素的个数 | |
set([obj]) | obj必须是支持迭代的,由obj中的元素创建集合,否则创建一个空集合 | |
forzenset([obj]) | 与set方法相同,返回不可变集合 | |
s.issubset(t) | s<=t | s中所有的元素都是t的成员 |
s.issupperset(t) | s>=t | t中所有的元素都是s的成员 |
s.union(t) | s|t | s或t中的元素 |
s.intersection(s) | s&t | s和t中的元素 |
s.difference(t) | s-t | s中的元素,而不是t中的元素 |
s.symmetric_difference(t) | s^t | s或t中的元素,但不是s和t共有的元素 |
s.copy() | 返回s的(浅复制)副本 | |
s.update(t) | s|=t | 将t中的成员添加s |
s.intersection_update(t) | s&=t | s中仅包括s和t中共有的成员 |
s.difference_update(t) | s-=t | s中包括仅属于s但不属于t的成员 |
s.symmetric_difference_update(t) | s^=t | s中包括仅属于s或仅属于t的成员 |
s.add(obj) | 将obj添加到s | |
s.remove(obj) | 将obj从s中删除,如果s中不存在obj将引发KeyError | |
s.discard(obj) | 如果s中存在obj,从s中删除它,不存在obj不会引发异常 | |
s.pop() | 移除并返回s中的任意一个元素 | |
s.clear() | 移除s中的所有元素 |