[Python学习日记-18] 细讲数据类型——字典
简介
在前面我们学习了列表,现在有个需求, 把你们公司每个员工的姓名、年龄、职务、工资都储存起来,方便以后调用,那你用列表编写了一段代码
staff_list = [
["Jove",23,"CEO",66000],
["Kerry",24,"行政",4000],
["佩奇",26,"讲师",40000],
# [xxx,xx,xx,xxx]
# [xxx,xx,xx,xxx]
# [xxx,xx,xx,xxx]
# ...
]
这样存没问题,不过你要查 Jove 的工资的话,是不是得把列表遍历一遍,那你又编写了一个 for 循环来遍历列表
for i in staff_list:
if i[0] == "Jove":
print(i)
代码输出如下:
但假如你公司有2万人,如果你要找的 Jove 正好在列表未尾,那意味着你要遍历2万次才能找到,这样速度会非常慢。
这个时候就要使用字典了,接下来学要的字典可以查询数据又快、操作又方便,是日后开发中必备的神奇,而且字典是 Python 中唯一的映射类型
定义:
{key1:value1,key2:value2,key3:value3}
1、键(key)与值(value)用冒号(:)分开
2、项与项用逗号(,)分开
示例:
info = {
"name":"百度",
"mission": "百度一下,你就知道",
"website": "https://www.baidu.com"
}
特性:
- 字典为 key-value 的结构
- key 必须为不可变数据类型且必须唯一(通常是字符串、数字或元组)
- 一个 key 可存放任意多个 value,value 可修改和可以不唯一
- 字典是无序的
- 查询速度快(与 hash 有关)
- value 可以是任何数据类型
字典的创建
在 Python 中,可以使用大括号{}来创建一个字典。字典是由一对一对的 key-value 组成的,每个 key-value 之间使用逗号分隔。key 和对应的 value 之间使用冒号分隔。代码如下
person = {"name":"Jove","age":20}
person = dict(name = "Jove",age = 20)
person = dict({"name":"Jove","age":20}) # 这个显得有点多余
# 为 key 批量赋值
person = {}.fromkeys([1,2,3,4,5,6,7,8],100)
代码输出如下:
字典的增删改查
在 Python 中,字典是一种无序的数据结构,可以用来存储 key-value
一、增
names = {
"Jove": [23, "CEO", 66000],
"Kerry": [24, "行政", 4000],
}
# 新增
names["佩奇"] = [26, "讲师", 40000] # 若字典中有相同的 key 则会直接覆盖
names.setdefault("Lucy",[50,"boss",100000]) # setdefault() 会如同 get() 一样返回添加的值,若字典中该 key 已经有 value 了则返回原来的值
代码输出如下:
setdefault() 不会进行修改,而且会返回已经存在的值,而 names[key] 这种方式则会直接修改,并没有任何提示,输出如下
二、删
names = {
"Jove": [23, "CEO", 66000],
"Kerry": [24, "行政", 4000],
"Lucy": [50,"boss",100000],
}
names.pop("Jove") # 删除指定 key
names.popitem() # 随意删除1个 key
del names["Kerry"] # 使用全局删除(删除变量也使用这个),删除指定 key,同 pop 方法
names.clear() # 清空 dict
代码输出如下:
三、改
names = {
"Jove": [23, "CEO", 66000],
"Kerry": [24, "行政", 4000],
"Lucy": [50,"boss",100000],
"key": "old_value",
}
names2 = {
"Jove": [27, "CTO", 66666],
"key2": "new_value2",
}
names["key"] = "new_value" # 如果 key 在字典中存在,new_value 将会替代原来的 value 值
names.update(names2) # 将字典 names2 的 key-value 添加到字典 names 中,若 key 有重复则会使用 names2 的 value 进行覆盖
代码输出如下:
四、查
names = {
"Jove": [23, "CEO", 66000],
"Kerry": [24, "行政", 4000],
"Lucy": [50,"boss",100000],
"key": "old_value",
}
print(names["Jove"]) # 返回字典中 key 对应的值,若 key 不存在字典中,则报错;
# 返回字典中 key 对应的值,若 key 不存在字典中,则返回 default 的值(default= None)
print(names.get("Jove"))
print(names.get("Eva",-1)) # 自定义不存在时的返回值
print("Jove" in names) # 若存在则返回 True,没有则返回 False
print(names.keys()) # 返回一个包含字典所有 key 的列表
print(names.values()) # 返回一个包含字典所有 value 的列表
print(names.items()) # 返回一个包含所有 (key,value) 元组的列表
代码输出如下:
以上是字典的基本增删改查操作,可以根据具体的需求进行相应的调整。注意,字典中的 key 是唯一的,如果添加相同的 key,则后面的键值对会覆盖前面的 key-value
字典的循环
一、循环方法
在 Python 中,你可以使用 for 循环来遍历字典中的 key、value 或 key-value,具体形式如下
1、for k in dic.keys()
2、for k,v in dic.items()
3、for k in dic(推荐用这种,效率速度最快)
二、代码示例
方式一:遍历字典的 key
names = {
"Jove": [23, "CEO", 66000],
"Kerry": [24, "行政", 4000],
"Lucy": [50,"boss",100000],
"key": "old_value",
}
for k in names.keys():
print(k,names[k])
代码输出如下:
方式二:遍历字典的 value
names = {
"Jove": [23, "CEO", 66000],
"Kerry": [24, "行政", 4000],
"Lucy": [50,"boss",100000],
"key": "old_value",
}
for k,v in names.items():
print(k,v)
代码输出如下:
方式三: 同时遍历字典的 key-value
names = {
"Jove": [23, "CEO", 66000],
"Kerry": [24, "行政", 4000],
"Lucy": [50,"boss",100000],
"key": "old_value",
}
for k in names:
print(k,names[k])
代码输出如下:
字典的长度
在 Python 中,可以使用内置函数 len() 来获取字典的长度。字典的长度表示字典中 key-value 的数量
names = {
"Jove": [23, "CEO", 66000],
"Kerry": [24, "行政", 4000],
"Lucy": [50,"boss",100000],
"key": "old_value",
}
print(len(names)) # key-value 的数量即字典长度
代码输出如下: