Python基础数据结构之字典(dict)---超详细
程序员文章站
2022-05-19 14:22:12
...
前言:我们上一篇文章讲解了Python基础数据结构中的元祖,那么这篇文章我们来讲解Python基础数据结构中的字典。
目录:
一、字典的概念
Python中的字典是一个可变并且无序的序列。它的元素是以‘’键值对(key-value)‘’的形式存储。字典类型是Python中唯一的映射类型,映射简单点说,指元素之间相互对应关系,即通过一个元素,可以唯一找到另一个元素。一对一关系。
二、字典的特征
特征 | 解释 |
---|---|
通过键来读取元素而不是通过索引读取元素 | 字典类型有时也称为关联数组或者散列表,它是通过键把一系列值联系起来,这样就通过键来获取元素而不是通过索引获取元素。 |
字典是无序的存储任意数据类型的集合 | 和列表、元祖不同,它不能通过索引来获取元素 |
字典是可变的,并且可以任意的嵌套 | 字典存储的值可以是Python支持的任意数据类型 |
字典中的键必须唯一 | 字典中,不支持一个键出现多次,如果出现多次,那么程序只会保留最后一个键值对 |
字典中的键必须不可变 | 字典中每个键值对的键只能是不可变的,即只能使用数字、字符串和元祖,不能使用列表 |
三、字典的定义
字典是以键值对形式存储:key:value
字典中的每个元素包含两部分:
- 键(key):各个键必须是唯一的(符合唯一和不可变即可)
- 键值(value):键值可以是Python支持的任意数据类型
1、使用{}创建字典
因为字典中的每个元素包含两个部分(key和value),所以每个字典元素的键和键值之间使用:
隔开,字典中的每个元素使用,
隔开,所有元素放在{}
内即可。
- 创建空字典
is_dict = {}
print(dict) # {}
print(len(dict)) # 0
print(type(dict)) # <class 'dict'>
- 创建非空字典
# 格式
is_dict = {key1:value1, key2:value2, ...}
# 使用字符串作为key
my_dict = {"name":"小明", "age":20, "sex":"男", "id":20180706}
print(my_dict) # {'name': '小明', 'age': 20, 'sex': '男', 'id': 20180706}
print(len(my_dict)) # 4
print(type(my_dict)) # <class 'dict'>
# 使用元祖作为key
my_dict = {(15, "你好"): "元祖01", (666,):"元祖02"}
print(my_dict) # {(15, '你好'): '元祖01', (666,): '元祖02'}
print(len(my_dict)) # 2
print(type(my_dict)) # <class 'dict'>
2、fromkeys()方法创建字典
格式:my_dict = dict.fromkeys(list, value = None)
fromkeys()方法里面有两个参数,list表示字典中所有键的列表,value表示键列表中所有键的值,如果第二个参数不写,则默认值为None
# 写第二个参数
is_list = [15, 3.14,"你好", "世界"]
my_dict = dict.fromkeys(is_list, 99)
print(my_dict) # {15: 99, 3.14: 99, '你好': 99, '世界': 99}
print(type(my_dict)) # <class 'dict'>
print(len(my_dict)) # 4
# 不写第二个参数
my_dict2 = dict.fromkeys(is_list)
print(my_dict2) # {15: None, 3.14: None, '你好': None, '世界': None}
3、dict()映射函数创建字典
# 创建空字典
is_dict = dict()
print(is_dict) # {}
print(len(is_dict)) # 0
print(type(is_dict)) # <class 'dict'>
# 创建非空字典
# 字符串类型的键(字符串键不能带引号):
my_dict1 = dict(姓名 = "小明", 年龄 = 20, 性别 = "男", id = 20180703)
print(my_dict1) # {'姓名': '小明', '年龄': 20, '性别': '男', 'id': 20180703}
print(type(my_dict1)) # <class 'dict'>
print(len(my_dict1)) # 4
# 列表类型的键值对
is_list1 = [("姓名", "小明"), ("年龄", 20), ("性别", "男"), ("id", 20180703)]
is_list2 = [["姓名", "小明"], ["年龄", 20], ["性别", "男"], ["id", 20180703]]
my_dict2 = dict(is_list1)
my_dict3 = dict(is_list2)
print(my_dict2) # {'姓名': '小明', '年龄': 20, '性别': '男', 'id': 20180703}
print(my_dict3) # {'姓名': '小明', '年龄': 20, '性别': '男', 'id': 20180703}
print(type(my_dict2)) # <class 'dict'>
print(type(my_dict3)) # <class 'dict'>
print(len(my_dict2)) # 4
print(len(my_dict3)) # 4
# 元祖类型的键值对
is_tuple1 = (("姓名", "小明"), ("年龄", 20), ("性别", "男"), ("id", 20180703))
is_tuple2 = (["姓名", "小明"], ["年龄", 20], ["性别", "男"], ["id", 20180703])
my_dict4 = dict(is_tuple1)
my_dict5 = dict(is_tuple2)
print(my_dict4) # {'姓名': '小明', '年龄': 20, '性别': '男', 'id': 20180703}
print(my_dict5) # {'姓名': '小明', '年龄': 20, '性别': '男', 'id': 20180703}
print(type(my_dict4)) # <class 'dict'>
print(type(my_dict5)) # <class 'dict'>
print(len(my_dict4)) # 4
print(len(my_dict5)) # 4
# dict()和zip()
is_list3 = ["姓名", "年龄", "性别", "id"]
is_list4 = ["张三", 22, "男", 20180702]
a = zip(is_list3, is_list4)
my_dict6 = dict(a)
print(my_dict6) # {'姓名': '张三', '年龄': 22, '性别': '男', 'id': 20180702}
print(type(my_dict6)) # <class 'dict'>
print(len(my_dict6)) # 4
四、字典的注意事项
1、字典中多个相同key,程序只会保存最后一个键值对
my_dict = {"name":"小明","age":15,"sex":"男","id":"0025","name":"张三"}
print(my_dict) # {'name': '张三', 'age': 15, 'sex': '男', 'id': '0025'}
print(my_dict["name"]) # 张三
2、在字典中,通过不同的key可以获取相同的值
my_dict = {"name":"小明","age":15,"sex":"男","id":"0025","No":"0025"}
value1 = my_dict["id"]
value2 = my_dict["No"]
print(value1) # 0025
print(value2) # 0025
3、在字典中,key只能为不可变数据类型,以保证key的唯一性
is_list1 = ["姓名"]
is_list2 = ["年龄"]
is_dict = {is_list1:"李四",is_list2:19}
print(is_dict) #报类型异常
4、在字典中,通常key使用字符串
.
五、字典的常见操作(增删改查)
1、添加元素
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008'}
# 如果key不存在,则将该key连同值一块儿添加到字典中(因为字典中的元素都是键值对)
my_dict["class"] = 201803
my_dict["height"] = 1.85
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008', 'class': 201803, 'height': 1.85}
2、删除元素
my_dict = {'name': '小明', 'age': 15, 'sex': '男', 'id': '008', 'class': 201803, 'height': 1.85}
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008', 'class': 201803, 'height': 1.85}
# 使用del删除元素或者使用clear(全部清除)
del my_dict["name"]
del my_dict["age"]
print(my_dict) # {'sex': '男', 'id': '008', 'class': 201803, 'height': 1.85}
my_dict.clear() # 清空字典
print(my_dict) # {}
3、修改元素
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
print(my_dict) # {"name": "小明", "age": 15, "sex": "男", "id": "008"}
# 如果key存在,通过key来定位元素,再修改对应的值
my_dict["name"] = "张三"
my_dict["age"] = 22
my_dict["id"] = "0010"
print(my_dict) # {'name': '张三', 'age': 22, 'sex': '男', 'id': '0010'}
4、查看元素
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
print(my_dict) # {"name": "小明", "age": 15, "sex": "男", "id": "008"}
# 通过key来获取值
name = my_dict["name"]
age = my_dict["age"]
sex = my_dict["sex"]
id = my_dict["id"]
print(name) # 小明
print(age) # 15
print(sex) # 男
print(id) # 008
# in:通过key来判断
if "name" in my_dict.keys():
print("存在")
# not in
if "num" not in my_dict.keys():
print("不存在")
六、字典的常见操作(访问字典的键和值)
1、获取字典中所有的键
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
# keys方法:获取字典中所有的key
key = my_dict.keys()
print(key) # dict_keys(['name', 'age', 'sex', 'id'])
2、获取字典中所有的值
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
# values方法:获取字典中所有的value
value = my_dict.values()
print(value) # dict_values(['小明', 15, '男', '008'])
3、获取字典中所有的键值对
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
# items方法:获取字典中所有的元素(key,value元祖组成的列表)
is_list = my_dict.items()
print(is_list) # dict_items([('name', '小明'), ('age', 15), ('sex', '男'), ('id', '008')])
七、字典的三种取值方式
1、通过key获取value
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
value1 = my_dict["name"]
value2 = my_dict["age"]
print(value1,value2) # 小明 15
2、通过setdefault获取value
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
# 格式 dict.setdefault(k,default)
# 一个参数
# 如果key值存在,则返回对应的value
value1 = my_dict.setdefault("name")
print(value1) # 小明
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008'}
# 如果key不存在,则返回None,并且将新的key和None保存到字典中
value2 = my_dict.setdefault("name1")
print(value2) # None
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008', 'name1': None}
# 两个参数
# 如果key值存在,则返回对应的value
value1 = my_dict.setdefault("age","哈哈哈")
print(value1) # 15
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008', 'name1': None}
# 如果key值不存在,则返回default的值,并且将新的key和default的值保存到字典中
value2 = my_dict.setdefault("age5","23")
print(value2) # 23
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008', 'name1': None, 'age5': '23'}
3、通过get获取value
my_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
# 格式 dict.get(k,default)
# 一个参数
# 如果key值存在,则返回对应的value
value1 = my_dict.get("id")
print(value1) # 008
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008'}
# 如果key值不存在,则返回None,不会将新的key和None保存到字典中
value2 = my_dict.get("num")
print(value2) # None
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008'}
# 两个参数
# 如果key值存在,则返回对应的value
value1 = my_dict.get("id","哈哈哈哈")
print(value1) # 008
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008'}
# 如果key值不存在,则返回default的值,不会将新的key和default的值保存到字典中
value2 = my_dict.get("num","16666")
print(value2) # 16666
print(my_dict) # {'name': '小明', 'age': 15, 'sex': '男', 'id': '008'}
八、字典的遍历
# 创建一个字典
is_dict = {"name": "小明", "age": 15, "sex": "男", "id": "008"}
# for循环遍历key(两种)
for key in is_dict.keys():
print(key)
"""
name
age
sex
id
"""
for key in is_dict:
print(key)
"""
name
age
sex
id
"""
# for循环遍历value
for value in is_dict.values():
print(value)
"""
小明
15
男
008
"""
# for循环遍历字典中的元素(key和value组成的元祖,也成键值对组成的元祖)
for item in is_dict.items():
print(item)
"""
('name', '小明')
('age', 15)
('sex', '男')
('id', '008')
"""
# 依次打印key和value
for item in is_dict.items():
key = item[0]
value = item[1]
print("key=%s value=%s" % (key, value))
"""
key=name value=小明
key=age value=15
key=sex value=男
key=id value=008
"""
for key1, value1 in is_dict.items():
print("key=%s value=%s" % (key1, value1))
"""
key=name value=小明
key=age value=15
key=sex value=男
key=id value=008
"""
# for循环遍历value和下标(用enumerate方法)
for i, value in enumerate(is_dict.values()):
print(i, value)
"""
0 小明
1 15
2 男
3 008
"""
以上就是博主对Python基础数据结构中字典的讲解,觉得写得不错就给博主点点赞,下篇文章讲解Python基础数据结构中的集合。
下一篇: .NET Core使用Redis