欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python基础数据结构之字典(dict)---超详细

程序员文章站 2022-05-19 14:22:12
...

前言:我们上一篇文章讲解了Python基础数据结构中的元祖,那么这篇文章我们来讲解Python基础数据结构中的字典。

一、字典的概念

Python中的字典是一个可变并且无序的序列。它的元素是以‘’键值对(key-value)‘’的形式存储。字典类型是Python中唯一的映射类型,映射简单点说,指元素之间相互对应关系,即通过一个元素,可以唯一找到另一个元素。一对一关系。


二、字典的特征

特征 解释
通过键来读取元素而不是通过索引读取元素 字典类型有时也称为关联数组或者散列表,它是通过键把一系列值联系起来,这样就通过键来获取元素而不是通过索引获取元素。
字典是无序的存储任意数据类型的集合 和列表、元祖不同,它不能通过索引来获取元素
字典是可变的,并且可以任意的嵌套 字典存储的值可以是Python支持的任意数据类型
字典中的键必须唯一 字典中,不支持一个键出现多次,如果出现多次,那么程序只会保留最后一个键值对
字典中的键必须不可变 字典中每个键值对的键只能是不可变的,即只能使用数字、字符串和元祖,不能使用列表

三、字典的定义

字典是以键值对形式存储:key:value
字典中的每个元素包含两部分:

  1. 键(key):各个键必须是唯一的(符合唯一和不可变即可)
  2. 键值(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基础数据结构中的集合。