前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python字典和集合

python字典和集合

作者头像
py3study
发布2020-01-07 10:51:58
5100
发布2020-01-07 10:51:58
举报
文章被收录于专栏:python3python3
代码语言:javascript
复制
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* 1. 字典字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、只含不可变类型元素的元组(1,2,3,’abc’)、实现__hash__()方法的自定义对象(因为__hash__()须返回一个整数,否则会出现异常:TypeError: an integer is required)。可以用hash(obj)检测对象是否是可哈希的。  >>> class HashEnable(object):  ...    def  __hash__(self):  ...         return 1 >>> he = HashEnable()  >>> hash(he)  1 >>> d = {he:1}  >>> d = {['1',2]:2}  Traceback (most recent call last):    File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'   1.1 字典常用操作 (1)创建字典  >>> d1 = {}  >>> d2 = {'player':'QVOD','game':'kw'}  >>> d1,d2 ({}, {'player': 'QVOD', 'game': 'kw'})    >>> d3 = dict((['name','alex'],['sex','man']))  >>> d3  {'name': 'alex', 'sex': 'man'}  >>> d33 = d3.copy()  >>> d33  {'name': 'alex', 'sex': 'man'}    >>> d4 = {}.fromkeys(('alex','zhou'),1)  >>> d4  {'alex': 1, 'zhou': 1}  >>> d5 = {}.fromkeys(('alex','zhou'))  >>> d5  {'alex': None, 'zhou': None}   (2)遍历字典 ps:访问一个不存在的key时,会发生KeyError异常,访问前可使用in或not in判断一下。  >>> d = {'name':'alexzhou','sex':'man'}    >>> for key in d:  ...     print '%s,%s' %(key,d[key])  ...   name,alexzhou  sex,man    >>> d['name']  'alexzhou' >>> d2 = {'name':'alexzhou','age':100}  >>> print 'name: %s,age: %d' %(d2['name'],d2['age'])  name: alexzhou,age: 100   >>> d2['sex']  Traceback (most recent call last):       File "<stdin>", line 1, in <module> KeyError: 'sex'   >>> 'sex' in d2  False >>> 'name' in d2  True   (3)更新字典  >>> d = {'name':'alexzhou','age':100}  >>> d['age'] = 88 >>> d  {'age': 88, 'name': 'alexzhou'}  >>> d.pop('age')  88 >>> d {'name': 'alexzhou'}  >>> d.clear()  >>> d  {}   1.2 常用内建函数 (1)cmp() 字典的比较:首先是字典的大小,然后是键,最后是值  >>> d1 = {'abc':1,'efg':2}  >>> d2 = {'abc':1,'efg':2,'h':3}  >>> cmp(d1,d2)  -1 >>> d3 = {'ab':1,'efg':2}  >>> cmp(d1,d3)  1 >>> d4 = {'abc':1,'efg':3}  >>> cmp(d1,d4)  -1 >>> d5 = {'abc':1,'efg':2}  >>> cmp(d1,d5)  0   (2)len() 返回键值对的数目  >>> d = {'abc':1,'efg':2} >>> len(d)  2   (3)keys()、values() 、items() keys()返回一个包含字典所有键的列表 values()返回一个包含字典所有值的列表 items()返回一个包含键值元组的列表  >>> d = {'name':'alex','sex':'man'}  >>> d.keys()  ['name', 'sex']  >>> d.values()  ['alex', 'man']  >>> d.items()  [('name', 'alex'), ('sex', 'man')]   (4)dict.get(key,default=None) 返回字典中key对应的value,若key不存在则返回default  >>> d = {'name':'alex','sex':'man'}  >>> d.get('name','not exists')  'alex' >>> d.get('alex','not exists')  'not exists'   (5)dict.setdefault(key,default=None) 若key存在,则覆盖之前的值,若key不存在,则给字典添加key-value对  >>> d.setdefault('name','zhou')  'alex' >>> d  {'name': 'alex', 'sex': 'man'}  >>> d.setdefault('haha','xixi')  'xixi' >>> d  {'haha': 'xixi', 'name': 'alex', 'sex': 'man'}   (6)dict.update(dict2) 将字典dict2的键值对添加到dict  >>> d = {'name':'alex','sex':'man'}  >>> d1 = {'age':100,'address':'shenzhen'}  >>> d.update(d1)  >>> d  {'age': 100, 'address': 'shenzhen', 'name': 'alex', 'sex': 'man'   (7)sorted(dict) 返回一个有序的包含字典所有key的列表  >>> sorted(d)  ['address', 'age', 'name', 'sex']   2. 集合set python中集合对象(set)是一组无序排列的可哈希的值,包含两种类型:可变集合(set)和不可变集合(frozenset),所以set不是可哈希的,frozenset是可哈希的,能当作字典的键。  >>> s = set('a')  >>> hash(s) Traceback (most recent call last): File "<stdin>", line 1, in <module>  TypeError: unhashable type: 'set'   >>> fs = frozenset('a')  >>> hash(fs)  -1305064881317614714   2.1 集合常用操作(1)创建集合  >>> s = set('alexzhou')  >>> s  set(['a', 'e', 'h', 'l', 'o', 'u', 'x', 'z'])  >>> fs = frozenset('alexzhou')  >>> fs  frozenset(['a', 'e', 'h', 'l', 'o', 'u', 'x', 'z'])   (2)遍历集合  >>> for e in s:  ...     print e  ...   a  e  h  l  o  u  x  z   (3)更新集合(add/update/remove/discard/pop/clear(-=)) s.add(obj):添加对象obj s.update(s1): 用s1中的成员修改s,s现在包含s1的成员 s.remove(obj):从集合s中删除obj,若obj不存在,则引发KeyError错误 s.discard(obj): 如果obj是s的成员,则删除obj s.pop(): 删除集合s中任意一个对象,并返回 s.clear(): 删除集合s中所有元素  >>> s = set('alexzhou')  >>> s.update('hai')  >>> s  set(['a', 'e', 'i', 'h', 'l', 'o', 'u', 'x', 'z'])  >>> s.add('hai')  >>> s  set(['a', 'hai', 'e', 'i', 'h', 'l', 'o', 'u', 'x', 'z'])  >>> s.remove('hai')  >>> s  set(['a', 'e', 'i', 'h', 'l', 'o', 'u', 'x', 'z'])  >>> s -= set('alex')  >>> s  set(['i', 'h', 'o', 'u', 'z'])  >>> s.pop()  'i' >>> s  set(['h', 'z', 'u', 'o'])  >>> s.discard('h')  >>> s  set(['z', 'u', 'o'])  >>> s.clear()  >>> s  set([])  >>> fs = frozenset('alexzhou')  >>> fs.add('z')  Traceback (most recent call last):    File "<stdin>", line 1, in <module>  AttributeError: 'frozenset' object has no attribute 'add'   (4) 集合比较 s1.issubset(s2):检测s1是否是s2的子集,是则返回True,否则返回False s1.issuperset(s2):检测s1是否是s2的超集,是则返回True,否则返回False  >>> s = set('alexzhou')  >>> fs = frozenset('alexzhou')  >>> s == fs  True >>> s2 = set('alexzhou')  >>> s == s2  True>>> s3 = set('alexzhouj')  >>> s > s3  False >>> s < s3  True >>> s   (5)联合union操作(s1|s2,s1.union(s2)) 产生的集合的每个元素至少是其中一个集合的成员。如果左右两边的集合类型相同,则产生的结果是相同的,若不同,则产生的结果跟左操作数相同。  >>> s1 = set('abc')  >>> fs = frozenset('de')   >>> s1 | fs  set(['a', 'c', 'b', 'e', 'd'])    >>> type(s1 | fs)  <type 'set'>  >>> type(fs | s1)  <type 'frozenset'>    >>> s2 = set('fg')  >>> type(s1 | s2)  <type 'set'>  >>> s1.union(fs)  set(['a', 'c', 'b', 'e', 'd'])  >>> type(s1.union(fs))  <TYPE ?set?>  >>> type(fs.union(s1))  <TYPE ?frozenset?>   (6)交集s1&s2,补集s1-s2,异或s1^s2 交集:新集合中的元素同时是s1和s2的元素 –> s1.intersection(s2) 补集:新集合中的元素只属于s1,不属于 –> s1.difference(s2) 异或:新集合中的元素不能同时属于s1和s2 –> s1.symmetric_difference(s2)  >>> fs = frozenset('de')  >>> s = set('def')  >>> s & fs  set(['e', 'd'])  >>> s - fs  set(['f'])  >>> fs - s  frozenset([])  >>> s ^ fs  set(['f'])  >>> s.intersection(fs)  set(['e', 'd'])  >>> s.difference(fs)  set(['f'])  >>> s.symmetric_difference(fs)  set(['f'])
*/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档