Python08

来源:互联网 发布:松下焊接机器人编程 编辑:程序博客网 时间:2024/06/01 08:51

字典用法

比较大小

Ⅰ 如果字典的长度不同,用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: 1dict2 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')>>> vfrozenset({'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 sTrue>>> 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>>> sTraceback (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中的所有元素
0 0