飞道的博客

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

591人阅读  评论(0)

前言:我们上一篇文章讲解了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基础数据结构中的集合。


转载:https://blog.csdn.net/liu991029/article/details/108181724
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场