一、学习python数据类型 — 字典
1、字典
-
定义:{key1:value1,key2:value2}
1、键与值用冒号“:”分开;
2、项与项用逗号“,”分开; -
示例:
shtdent = {
"name":"小花",
"age": 18,
"grade": "六年级"
}
- 字典的特点:
1、 key-value结构
2、key必须为不可变数据类型、必须唯一
3、可存放任意多个value、可修改、可以不唯一
4、无序
5、查询速度快,且不受dict的大小影响,至于为何快?我们学完hash再解释。
1.1、字典的创建方式,可参考如下方式:
##### 方式一 #####
In [216]: students = {"name":"小花","age":22,"grade":"初二","score":88}
In [217]: students
Out[217]: {'name': '小花', 'age': 22, 'grade': '初二', 'score': 88}
##### 方式二 #####
In [218]: teachers = dict(name = "小小", course = "语文")
In [219]: teachers
Out[219]: {'name': '小小', 'course': '语文'}
##### 方式三 #####
In [221]: school =dict({"name":"jialidun","age":120})
In [222]: school
Out[222]: {'name': 'jialidun', 'age': 120}
##### 方式四 #####
In [223]: {}.fromkeys([1,2,3,4,5,6,7,8],100)
Out[223]: {1: 100, 2: 100, 3: 100, 4: 100, 5: 100, 6: 100, 7: 100, 8: 100}
1.2、字典的常用方法,如:增加、删除、修改、查询、遍历等
1.2.1、给字典增加一个元素,示例如下:
In [218]: teachers = dict(name = "小小", course = "语文")
In [219]: teachers
Out[219]: {'name': '小小', 'course': '语文'}
In [224]: students["telephone"] = "18829528899" # 增加一个元素
In [225]: students
Out[225]:
{'name': '小花',
'age': 22,
'grade': '初二',
'score': 88,
'telephone': '18829528899'}
1.2.2、查询字典中的一个元素,示例如下:
1、直接通过key值查找元素,
####### 方式一 直接通过key值查找元素 ########
In [233]: students
Out[233]:
{'name': '小花',
'age': 22,
'grade': '初二',
'score': 88,
'telephone': '18829528899'}
In [234]: students["name"]
Out[234]: '小花'
In [235]: students["age"]
Out[235]: 22
In [236]: students["name1"] # 查找一个不存在的键,会报错
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-236-dcf00c2e6139> in <module>
----> 1 students["name1"]
KeyError: 'name1'
2、通过get()方法查询元素,示例如下:
- dic.get(key, default = None)#返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)
❗️⚠️❗️get() 方法不会改变字典的长度。
####### 方式二 通过get()方法查询元素 ########
In [285]: students.get('name')
Out[285]: '小草'
In [282]: teachers
Out[282]: {'age': '18'}
In [283]: teachers.get('age')
Out[283]: '18'
3、通过in关键字查询元素,示例如下:
####### 方式三 通过in关键字查询元素 ########
In [288]: 'age' in students
Out[288]: True
In [287]: age in students # 查询一个不在这个元组中的数据,会发生报错
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-287-70e39602ecbf> in <module>
----> 1 age in students
NameError: name 'age' is not defined
######## 使用not in 关键字,起到与in相反发的作用
In [289]: name not in students
Out[289]: True
4、通过dic.keys() 可以查询到一个字典中的所有key值,返回一个包含字典所有KEY的列表,示例如下:
In [286]: students
Out[286]:
{'name': '小草',
'age': 22,
'grade': '初二',
'score': 88,
'telephone': '18829528899',
'address': 'china'}
In [290]: students.keys()
Out[290]: dict_keys(['name', 'age', 'grade', 'score', 'telephone', 'address'])
5、通过dic.values() 可以查询一个字典所有的values值,返回一个包含字典所有value的列表,示例如下:
In [286]: students
Out[286]:
{'name': '小草',
'age': 22,
'grade': '初二',
'score': 88,
'telephone': '18829528899',
'address': 'china'}
In [291]: students.values()
Out[291]: dict_values(['小草', 22, '初二', 88, '18829528899', 'china'])
6、通过dic.items() 可以查询到一个字典的key和value,返回一个包含所有(键,值)元组的列表,示例如下:
In [292]: students.items()
Out[292]: dict_items([('name', '小草'), ('age', 22), ('grade', '初二'), ('score', 88), ('telephone', '18829528899'), ('address', 'china')])
1.2.3、修改字典中的一个元素,示例如下:
1、使用下标直接进行dic[‘key’] = ‘new_value’,如果key在字典中存在,'new_value’将会替代原来的value值;如果不存在,则会报错。
In [263]: students['name'] = "小草" # 修改一个存在的值
In [264]: students
Out[264]:
{'name': '小草',
'age': 22,
'grade': '初二',
'score': 88,
'telephone': '18829528899',
'address': 'china'}
In [265]: students["KK"] # 修改一个在student中不存在的key值,会发生报错
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-265-685ca2e6d181> in <module>
----> 1 students["KK"]
KeyError: 'KK'
2、dic.update(dic2) 将字典dic2的键值对添加到字典dic中,执行这行程序后
- 如果两个字典中都有相同的key值,dic2会覆盖dic的值
- 如果dic2中有,dic中没有的值,会将dic2的值填入dic中,如下:
n [266]: teachers
Out[266]: {'name': '小小', 'course': '语文'}
In [267]: students
Out[267]:
{'name': '小草',
'age': 22,
'grade': '初二',
'score': 88,
'telephone': '18829528899',
'address': 'china'}
In [268]: teachers.update(students)
In [269]: teachers
Out[269]:
{'name': '小草',
'course': '语文',
'age': 22,
'grade': '初二',
'score': 88,
'telephone': '18829528899',
'address': 'china'}
1.2.4、删除字典中的一个元素,示例如下:
names.pop("alex") # 删除指定key
names.popitem() # 随便删除1个key
del names["oldboy"] # 删除指定key,同pop方法
names.clear() # 清空dict
1.2.5、循环字典,示例如下:
1、使用for k in dic.keys()循环,如下所示:
例如:
In [329]: for k in students.keys():
...: print(k)
...:
name
age
grade
score
telephone
address
In [330]: for k in students.keys():
...: print(students[k])
...:
小草
22
初二
88
18829528899
china
2、使用for k,v in dic.items() 进行遍历,如下所示:
In [332]: for k,v in students.items():
...: print(k,v)
...:
name 小草
age 22
grade 初二
score 88
telephone 18829528899
address china
3、通过for k in dic # 推荐用这种,效率速度最快,如下所示:
info = {
"name":"小猿圈",
"mission": "帮一千万极客高效学编程",
"website": "http://apeland.com"
}
for k in info:
print(k,info[k])
输出
name 小猿圈
mission 帮一千万极客高效学编程
website http://apeland.com