字典
1 # 概述:使用键-值(key-value)方式存储。 2 # key的特点: 3 # 1、字典中的key必须是唯一的 4 # 2、key值必须是不可变的数据类型:字符串、元组、Number 5 # 3、list是可变的,不能作为key值使用 6 # 4、value:可以是任意类型的数据,可以重复。 7 # 本质:一种无序的、可变的集合。 8 9 # 学生: 学号 姓名 性别 年龄 联系方式 10 # [001, lily, girl, 12, 1234] 11 # [002, lucy, 13, boy, 1234] 12 13 # 一、创建字典 14 # 语法格式:字典名 = {key1 : value1, key2 : value2, ......} 15 # 1、创建一个空字典 16 dict1 = {} 17 print(dict1) 18 print(type(dict1)) # dict 19 # 2、创建一个带有键值对的字典 姓名 年龄 20 dict2 = {"lily": 28, "lucy": 26, "lilei": 22} 21 print(dict2) 22 print(type(dict2)) # dict 23 dict3 = {"lily": 23} 24 print(type(dict3)) # dict 25 26 # 3、验证key的规则 27 # 3.1、Number是否可以做key值 可以 28 dict4 = {1: "abc"} 29 print(dict4) 30 # 3.2、String是否可以做key值 可以 31 dict5 = {"abc": "def"} 32 print(dict5) 33 # 3.3、Tuple是否可以做key值 可以 34 dict6 = {(1, 2): "qq&wx"} 35 print(dict6) 36 # 3.4、List是否可以做key值 不可以 37 # dict7 = {[1, 2]: "qqqqqq"} 38 # print(dict7) # TypeError: unhashable type: 'list' 39 # 3.5、Dict是否可以做key值 不可以 40 # dict7 = {{1: "abc"}: "qqqqqq"} 41 # print(dict7) # TypeError: unhashable type: 'dict' 42 # 3.6、Bool是否可以做key值 可以 很少使用该方式作为key值 43 dict8 = {True: "qq&wx"} 44 print(dict8) 45 dict8 = {None: "qq&wx"} 46 print(dict8) 47 48 # dict9 = {(1,2,[3,4]): "qq&wx"} 49 # print(dict9) # 错误 50 51 # 3.7、字典中的key必须是唯一的 52 # 创建时可以出现重复的key,但最后指挥保留最后一次的value值。 53 dic = {"a": 1, "b": 2, "c": 3, "d": 4, "a": 100} 54 print(dic) 55 56 # 4、验证value的规则 57 # value:python是支持的数据类型均可以 58 dict11 = {1: 123, 2: "abc", 3: None, 4: True, 5: (1,2,3), 6: [1,2,3,4], 59 7: {"a": 1}, 8: 3.14} 60 print(dict11) 61 62 63 # 二、字典的访问 64 # 1、获取字典的元素方式1 : 字典名[key] 65 # 注:当key值不存在时,返回一个错误 66 dic12 = {"a": 1, "b": 2, (1, 2): 3, 123: 4} 67 print(dic12["b"]) 68 print(dic12[123]) 69 print(dic12[(1, 2)]) 70 # print(dic12["abc"]) # KeyError: 'abc' 71 72 # 2、获取字典的元素方式2 : 字典名.get(key) 73 # 注:当key值不存在时,返回None 74 print(dic12.get("b")) 75 print(dic12.get(123)) 76 print(dic12.get((1, 2))) 77 print(dic12.get("abcdef")) # None 78 79 if dic12.get("abcdef") == None: 80 print("无值") 81 else: 82 print(dic12.get("abcdef")) 83 84 85 # 三、字典的操作 86 dic = {"a": 1, "b": 2, "c": 3, "d": 4} 87 # 1、增 格式:字典名称[新的key值] = 新的value值 88 print(dic) 89 dic["e"] = 5 90 print(dic) 91 92 # 2、删 格式:字典名称.pop(key值) 93 # 注:key值被删除时,value值也一起被删掉 94 # 如果key值不存在,删除时报错 95 dic.pop("b") 96 print(dic) 97 # dic.pop("f") # KeyError: 'f' 98 # print(dic) 99 100 # 3、改 格式:字典名称[key值] = 新的value值 101 dic["a"] = 100 102 print(dic) 103 104 # 4、查 105 print(dic["d"]) 106 print(dic.get("e")) 107 108 # 5、其他 109 # 5.1、获取键值对个数 len(dict) 110 print(len(dic)) 111 112 113 # 四、字典的遍历 114 dic = {"a": 1, "b": 2, "c": 3, "d": 4} 115 # 1、遍历 for in 116 for key in dic: 117 print(key) 118 print(dic[key]) 119 # 2、字典名.keys() : 返回字典中所有的key值(列表类型) 120 print(dic.keys()) # dict_keys(['a', 'b', 'c', 'd']) 121 keyList = dic.keys() 122 for key in dic.keys(): 123 print(key) 124 print(dic[key]) 125 126 # 3、字典名.values() : 返回字典中所有的value值(列表类型) 127 print(dic.values()) # dict_values([1, 2, 3, 4]) 128 for v in dic.values(): 129 print(v) 130 # 4、字典名.items() : 返回字典中所有的key及value值(列表类型,列表 131 # 中的元素为元组类型,元组的第一个元素为key,第二个元素为value) 132 print(dic.items()) # dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) 133 for ii in dic.items(): 134 print(ii) 135 136 for key, value in dic.items(): 137 print(key, value) 138 139 # ValueError: too many values to unpack (expected 2) 140 # ValueError: not enough values to unpack (expected 3, got 2) 141 # 注: for后面的变量个数与元组中的个数一致 142 list1 = [('a', 1, "qq"), ('b', 2, "ww"), ('c', 3, "rr"), ('d', 4,"yy")] 143 for i,j,k in list1: 144 print(i,j,k) 145 146 147 ''' 148 dict: 149 1、查找及插入速度快,不会随着key及value的增加而变慢 150 2、需要占用的内存大,内存浪费多 151 list: 152 1、查找及插入速度会随着数据的增加而变慢 153 2、需要占用的内存小,内存浪费少 154 ''' 155 156 # 五、仿照json大量数据 157 dic1 = {"a": [1,2,3]} 158 print(dic1["a"][2]) 159 160 dic2 = {"a" : {1:"qq", 2:"wx"}} 161 print(dic2["a"][2]) 162 163 li1 = [{"a":1},{"a":2}] 164 print(li1[1]["a"]) 165 for i in li1: 166 print(i["a"]) 167 168 169 li2 = [{"appname":"123", "price":12, "dateTime":"2019-1-2"}, 170 {"appname": "456", "price": 15, "dateTime": "2019-1-5"}] 171 172 dic4 = {"app":"时光", 173 "time": "2017-5-16", 174 "des":{"jm":"12345", 175 "xm": "1234567890"}} 176 print(dic4["des"]["xm"])