文章目录
- 前言
- 一、字典
- 二、创建字典
-
- [1. 创建空字典](#1. 创建空字典)
- [2. 创建非空字典](#2. 创建非空字典)
- 二、操作字典
-
- [1. 增加字典元素](#1. 增加字典元素)
-
- [1.1 `thisdict[new_key] = new_value`](#1.1
thisdict[new_key] = new_value) - [1.2 `update`函数](#1.2
update函数)
- [1.1 `thisdict[new_key] = new_value`](#1.1
- [2. 删除字典元素](#2. 删除字典元素)
-
- [2.1 `pop`方法](#2.1
pop方法) - [2.2 `popitem`方法](#2.2
popitem方法)
- [2.1 `pop`方法](#2.1
- [3. 查找字典元素](#3. 查找字典元素)
-
- [3.1 `in/not in`操作符](#3.1
in/not in操作符) - [3.2 `get`方法](#3.2
get方法) - [3.3 `thisdict[key]`](#3.3
thisdict[key])
- [3.1 `in/not in`操作符](#3.1
- [4. 修改字典元素](#4. 修改字典元素)
-
- [4.1 `thisdict[key] = new_value`](#4.1
thisdict[key] = new_value)
- [4.1 `thisdict[key] = new_value`](#4.1
- [5. 遍历字典](#5. 遍历字典)
-
- [4.1 `for`循环](#4.1
for循环) - [4.2 `keys`方法](#4.2
keys方法) - [4.3 `values`方法](#4.3
values方法) - [4.4 `items`方法](#4.4
items方法)
- [4.1 `for`循环](#4.1
- [5. 合并字典](#5. 合并字典)
-
- [4.1 `update`方法](#4.1
update方法)
- [4.1 `update`方法](#4.1
- 三、字典常用接口
-
- [1. 字典操作](#1. 字典操作)
- [2. 字典的成员函数](#2. 字典的成员函数)
- 总结
前言
本文主要介绍了Python中的数据类型------字典的相关概念
一、字典
字典(dict)是一个无序的、可变的、有索引的集合,字典中不存在重复的成员。
字典的本质是哈希表,存储在字典中的元素是可变的、无序的、键唯一的,字典中的元素是以键值对的形式存储的。
字典中的key
字典中存储的key值值的数据类型可以是不同的。
但并非所有类型的数据都可以作为字典的key,因为字典本质是一个哈希表,所以它的key值必须是"可哈希的",即可以计算出一个哈希值
在Python中,使用hash函数可以计算出一个对象的哈希值
python
#整数
print(hash(100)) # 100
#小数
print(hash(3.14)) # 322818021289917443
#字符串
print(hash('Jinger')) # 7177143201945965687
#元组
print(hash((2, 'hi', 3.4))) # -8471141487028405883
以上类型都是可哈希的,因为可以通过hash函数计算出它的哈希值
以下的类型是不可哈希的,使用hash函数来计算不可哈希的对象时,程序会抛异常
python
#列表
print(hash([1, 3.0, 'Jinger'])) # TypeError: unhashable type: 'list'
#集合
print(hash({1, 3.0, 'Jinger'})) # TypeError: unhashable type: 'set'
#字典
print(hash({1:'hi', 3.0:'123', 'name':'Jinger'})) # TypeError: unhashable type: 'dict'
二、创建字典
1. 创建空字典
使用{}可以创建一个空字典。
python
a = {}
print(type(a)) # <class 'dict'>
print(a) # {}
使用dict()方法也可以创建一个空字典。
python
a = dict()
print(type(a)) # <class 'dict'>
print(a) # {}
2. 创建非空字典
创建字典时,可以在{}中设置字典的初始值。
python
a = {
1:2,
'Jinger':5,
}
print(type(a)) # <class 'dict'>
print(a) # {1: 2, 'Jinger': 5}
注意:
- 字典是一种键值对存储的结构,键和值一一对应;
- 键值对之间使用
,分割,键(key)和值(value)之间使用:分割; - 为了便于阅读,建议在创建字典时把多个键值对分行来书写;
- 最后一个键值对的后面可以写
,也可以不写,。
二、操作字典
1. 增加字典元素
1.1 thisdict[new_key] = new_value
使用thisdict[new_key] = new_value的方式可以将键值对<new_key, new_value>插入到字典thisdict中。
python
a = {
1:2,
'Jinger':3
}
a['hi'] = 100
print(type(a)) # <class 'dict'>
print(a) # {1: 2, 'Jinger': 3, 'hi': 100}
1.2 update函数
使用update方法可以将多个键值对插入到字典中。
python
a = {
1:2,
'Jinger':3
}
a.update({'hi':100, 30:'test'})
print(type(a)) # <class 'dict'>
print(a) # {1: 2, 'Jinger': 3, 'hi': 100, 30: 'test'}
2. 删除字典元素
2.1 pop方法
使用pop方法可以删除字典中指定键值(key)的键值对
如果指定的key值不存在,则会抛异常。
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
a.pop('name')
print(type(a)) # <class 'dict'>
print(a) # {'id': 1, 'age': 22}
a.pop('Jinger') # KeyError: 'Jinger'
2.2 popitem方法
使用popitem方法可以删除最后插入字典的键值对
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
a.popitem()
print(type(a)) # <class 'dict'>
print(a) # {'id': 1, 'name': 'Jinger'}
注意 :
在Python3.7之前的版本,popitem方法是随机删除一个键值对
3. 查找字典元素
3.1 in/not in操作符
in/not in操作符可以判断指定的key值是否存在于字典中
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
print('name' in a) # True
print('name' not in a) # False
print('address' in a) # False
print('address' not in a) # True
3.2 get方法
get方法可以获取指定key值对应的value值。
如果该key值存在,则返回对应的value值;如果该key值不存在,则返回None
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
print(a.get('id')) # 1
print(a.get('name')) # Jinger
print(a.get('address')) # None
3.3 thisdict[key]
thisdict[key]方法可以获取指定key值对应的value值。
如果该key值存在,则返回对应的value值;如果该key值不存在,则会抛异常
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
print(a['id']) # 1
print(a['name']) # Jinger
print(a['address']) # KeyError: 'address'
4. 修改字典元素
4.1 thisdict[key] = new_value
使用thisdict[key] = new_value可以将key值对应的value值修改为new_value。
如果指定key值不存在,则相当于将键值对<key, new_value>添加到字典中。
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
a['age'] = 18
print(type(a)) # <class 'dict'>
print(a) # {'id': 1, 'name': 'Jinger', 'age': 18}
a['address'] = '208'
print(type(a)) # <class 'dict'>
print(a) #{'id': 1, 'name': 'Jinger', 'age': 18, 'address': '208'}
5. 遍历字典
4.1 for循环
字典是一个可迭代对象,因此可以使用for循环对字典进行遍历。
注意 :
使用for循环对字典进行遍历时,本质是在对字典中的key值进行遍历
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
for key in a:
print(key, a[key])
# id 1
# name Jinger
# age 22
4.2 keys方法
使用keys方法可以获取到字典中所有key值所组成的列表
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
print(a.keys()) # dict_keys(['id', 'name', 'age'])
for key in a.keys():
print(key, a[key])
# id 1
# name Jinger
# age 22
4.3 values方法
使用values方法可以获取到字典中所有value值所组成的列表
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
print(a.values()) # dict_values([1, 'Jinger', 22])
for value in a.values():
print(value)
# 1
# Jinger
# 22
4.4 items方法
使用items方法可以获取到字典中所有键值对所组成的元组列表
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
print(a.items()) # dict_items([('id', 1), ('name', 'Jinger'), ('age', 22)])
for item in a.items():
print(item)
# ('id', 1)
# ('name', 'Jinger')
# ('age', 22)
for key, value in a.items():
print(key, value)
# id 1
# name Jinger
# age 22
5. 合并字典
4.1 update方法
使用update方法,可以将一个字典合并到另一个字典中(例如,a.update(b)就是将字典b中的键值对依次插入到字典a中,该操作不会影响到字典b)
python
a = {
'id':1,
'name':'Jinger',
'age':22
}
b = {
'address':208,
'high':280
}
a.update(b)
print(type(a)) # <class 'dict'>
print(a) # {'id': 1, 'name': 'Jinger', 'age': 22, 'address': 208, 'high': 280}
print(type(b)) # <class 'dict'>
print(b) # {'address': 208, 'high': 280}
三、字典常用接口
1. 字典操作
| 字典操作 | 方式 |
|---|---|
| 字典检查 | in/not in操作符 |
| 添加键值对 | thisdict[new_key] = new_value |
| 访问值 | thisdict[key] |
| 修改值 | thisdict[key] = new_value |
| 字典长度 | len()函数 |
2. 字典的成员函数
| 成员函数 | 功能 |
|---|---|
copy() |
复制字典 |
clear() |
清空字典 |
get() |
返回指定key值的value值 |
update() |
向字典中添加多个键值对(合并字典) |
pop() |
删除指定key值的键值对 |
popitem() |
删除最后插入的键值对 |
keys() |
返回字典中所有``key值组成的列表 |
values() |
返回字典中所有value值组成的列表 |
items() |
返回字典中所有键值对组成的元组列表 |
fromkeys() |
创建一个新字典,以指定的序列元素作为key值,所有的key使用同一个value值 |
setdefault() |
获取指定key值的value值。如果key存在,则返回对应value值;如果key不存在,则插入该key并设置value为默认值,然后返回该默认值value |
总结
以上就是今天要讲的内容,本文介绍了Python数据类型------字典的相关概念。本文作者目前也是正在学习Python相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。
最后,如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!