dict 字典表属于映射分类
dict的声明
>>> #dict类型 是 {}中包含若干个键值对 >>> d = dict() >>> d = {} >>> type(d) <class ‘dict‘> >>> #看来 一个键值对也没有的{}也是dict类型的 >>> >>> # 1 用{}来声明键值对 >>> man = {‘name‘:‘Mark‘,‘height‘:1.8,‘weight‘:80} >>> #创建这个dict类型对象man 用来记录一个人的基本信息,姓名、身高、体重 >>> >>> # 2 用dict()函数将参数转化为dict数据类型 >>> man1 = dict(‘name‘=‘Mark‘,‘height‘=1.8,‘weight‘=80) SyntaxError: keyword can‘t be an expression >>> man1 = dict(name=‘Mark‘,height=1.8,weight=80) >>> man1 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Mark‘} >>> >>> >>> # 3 将list类型的转化为dict >>> l = [(‘name‘,‘Mark‘),(‘weight‘,80)] >>> d = dict(l) >>> d {‘weight‘: 80, ‘name‘: ‘Mark‘} >>> >>> # 4 将tuple类型的转化为dict >>> t = ((‘name‘,‘Mark‘),(‘weight‘,80)) >>> dd = dict(t) >>> dd {‘weight‘: 80, ‘name‘: ‘Mark‘} >>> >>> >>> # 5 创建只有键,值全部为None的dict >>> keys = [‘name‘,‘weight‘,‘height‘] >>> ddd = dict.fromkeys(keys) >>> ddd {‘weight‘: None, ‘name‘: None, ‘height‘: None} >>> >>>#特别说明,字典表的键必须是不可变类型的 #目前所学的字典表中的键值对都是无序的
获取dict中的键值对
# 1 判断一个键是否在dict中存在 >>>man1 = dict(name=‘Mark‘,height=1.8,weight=80) >>> ‘name‘ in man1 True >>> ‘Name‘ in man1 False >>> # 2 访问dict中某一个建的值 >>> man1[‘name‘] ‘Mark‘ >>> >>> #这样访问很方便,但要确定键是存在的,不然会报错 >>> man1[‘Name‘] Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> man1[‘Name‘] KeyError: ‘Name‘ >>> # 为了使键在dict中不存在时获取键的值时不会报错或者提示一些个性化定制的信息时,可用get()函数 >>> man1.get(‘name‘) ‘Mark‘ >>> >>> man1.get(‘Name‘) >>> man1.get(‘Name‘,‘这个键在字典表中不存在哦‘) ‘这个键在字典表中不存在哦‘ >>> # 3 嵌套的字典的元素访问 >>> man = {‘name‘:{‘姓‘:‘王‘,‘名‘:‘大锤‘}} >>> #如果想获得姓 >>> a = man[‘name‘] >>> a {‘姓‘: ‘王‘, ‘名‘: ‘大锤‘} >>> b = a[‘姓‘] >>> b ‘王‘ >>> >>> #把这两步合在一起就是 >>> man[‘name‘][‘姓‘] ‘王‘ >>> # 4 dict中的键值对的遍历 # 4.1 获取dict中的键 >>> man1.keys() dict_keys([‘weight‘, ‘height‘, ‘name‘]) >>> # 4.2 获取dict中的值 >>> man1.values() dict_values([80, 1.8, ‘Mark‘]) >>> # 4.3 获取dict中的键值对 >>> man1.items() dict_items([(‘weight‘, 80), (‘height‘, 1.8), (‘name‘, ‘Mark‘)]) >>> # 4.1、4.2、4.3中获取都是可迭代对象,不仅可以用来转换成其他类型的可迭代对象,还可以用来遍历 # 4.4 将 man1.values()转换成list类型 >>> list(man1.values()) [80, 1.8, ‘Mark‘] >>> # 4.5 遍历man1.values() >>> for i in man1.values(): print(i) 80 1.8 Mark >>> # 4.6 man1.items()返回的是键值对,如果遍历时想对键值对中的键、值分别操作,可以如下操作 >>> for k,v in man1.items(): print(k,‘----‘,v) weight ---- 80 height ---- 1.8 name ---- Mark >>> # 对,就是这样,从man1.items()取出的一个键值对的形式是(‘weight‘, 80),这个形式不就是元组嘛 #所以 k,v in man1.items() 就是把取出的每一个键值对组成的元组的第一个元素赋值给k,第二个元素赋值给v,而第一个 第二个元素分别就是键值对的键、值
dict的特性
特性 一:通过键(key),而非索引访问数据。k-v键值对
特性 二:值为任意对象的无序集合,而键必须是不可变类型的数据类型
特性 三:可变长度(键值对的对数是可改变的),异质(值可以是不同的数据类型),可任意嵌套(值还可以是一个dict,并且可以嵌套n多层)
特性 四:属于‘可变映射‘分类
特性 五:对象引用表(Hash Table),这个类似于list中的元素的访问法方式,dict中的键和作为值的对象的物理地址绑定在一起,这样通过键就能找到值
字典表的常用操作
1 # 1 字典表的复制 2 >>> man1 3 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Mark‘} 4 >>> man = man1.copy() 5 >>> man 6 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Mark‘} 7 >>> 8 9 # 2 清空字典表中的键值对 10 >>> man.clear() 11 >>> man 12 {} 13 >>> 14 15 # 3 修改dict中键值对中键对应的值 16 >>> man1 17 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Mark‘} 18 >>> 19 >>> man1[‘name‘] = ‘Tony‘ 20 >>> man1 21 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘} 22 >>> 23 24 # 4 拼接两个dict 25 >>> d = dict(staff_id = ‘111111‘,post_id = ‘222222‘) 26 >>> d 27 {‘staff_id‘: ‘111111‘, ‘post_id‘: ‘222222‘} 28 >>> 29 >>> man1.update(d) 30 >>> man1 31 {‘weight‘: 80, ‘height‘: 1.8, ‘staff_id‘: ‘111111‘, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘} 32 >>> 33 34 # 5 删除dict中的键值对 35 # 5.1 用全局函数 del() 36 >>> man1 37 {‘weight‘: 80, ‘height‘: 1.8, ‘staff_id‘: ‘111111‘, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘} 38 >>> 39 >>> del man1[‘staff_id‘] 40 >>> man1 41 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘} 42 >>> 43 >>> #如果要删除的键值对的键在dict中不存在会如何 44 >>> del man1[‘staffpost‘] 45 Traceback (most recent call last): 46 File "<pyshell#132>", line 1, in <module> 47 del man1[‘staffpost‘] 48 KeyError: ‘staffpost‘ 49 >>> 50 51 # 5.2 用dict自带的pop()函数进行键值对的删除 52 >>> man1 53 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘} 54 >>> man1.pop(‘post_id‘) 55 ‘222222‘ 56 >>> man1 57 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘} 58 >>> 59 60 >>> man1 61 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘} 62 >>> man1.pop(‘post_id‘) 63 ‘222222‘ 64 >>> man1 65 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘} 66 >>> 67 >>> #如果要弹出的键不存在 68 >>> man1.pop(‘staffpost‘) 69 Traceback (most recent call last): 70 File "<pyshell#140>", line 1, in <module> 71 man1.pop(‘staffpost‘) 72 KeyError: ‘staffpost‘ 73 >>> 74 >>> #pop()函数可以再加一个参数,用来在键不存在的时候输出,代替报错:KeyError 75 >>> man1.pop(‘staffpost‘,‘该键不存在哦‘) 76 ‘该键不存在哦‘ 77 >>> 78 79 # 6 获取字典表的键值对数目 80 >>> man1 81 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘} 82 >>> len(man1) 83 3 84 >>>