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"])