字典

  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"])
原文地址:https://www.cnblogs.com/BKY88888888/p/11252555.html