【Python】字典

文章目录

  • [1. 字典是什么](#1. 字典是什么)
  • [2. 创建字典](#2. 创建字典)
  • [2. 查看 key](#2. 查看 key)
  • [3. 新增 / 修改元素](#3. 新增 / 修改元素)
  • [4. 删除元素](#4. 删除元素)
  • [5. 遍历字典元素](#5. 遍历字典元素)
  • [6. 取出所有 key 和 value](#6. 取出所有 key 和 value)
  • [7. 合法的 key 类型](#7. 合法的 key 类型)
  • 小结

1. 字典是什么

字典是一种存储 键值对 的结构。

啥是键值对?这是计算机/生活中一个非常广泛使用的概念。

键(key)值(value) 进行一个一对一的映射,然后就可以根据键,快速找到值。

举个栗子:

  • 学校的每个同学,都会有一个唯一的学号。
  • 知道了学号,就能确定这个同学。
  • 此处 "学号" 就是 "键",这个 "同学" 就是 "值"。

2. 创建字典

  • 创建一个空的字典,使用 { } 表示字典。
python 复制代码
a = {}
b = dict()

print(type(a))
print(type(b))

运行结果如下:

  • 也可以在创建的同时指定初始值。

键值对之间使用 , 分割,键和值之间使用 : 分割(记得在冒号后面推荐加一个空格),然后使用 print 来打印字典内容

python 复制代码
student = { 'id': 1, 'name': 'zhangsan' }
print(student)

运行结果如下:

  • 为了代码更规范美观,在创建字典的时候往往会把多个键值对,分成多行来书写。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan'
}
  • 最后一个键值对,后面可以写 , 也可以不写。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
}

2. 查看 key

  • 使用 in 可以判定 key 是否在字典中存在。返回布尔值。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
}

print('id' in student)
print('score' in student)

运行结果如下:

  • 使用 [ ] 通过类似于取下标的方式,获取到元素的值。只不过此处的 "下标" 是 key。(可能是整数,也可能是字符串等其他类型)。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
}

print(student['id'])
print(student['name'])

运行结果如下:

  • 如果 key 在字典中不存在,则会抛出异常。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
}

print(student['score'])

运行结果如下:

3. 新增 / 修改元素

使用 [ ] 可以根据 key 来新增 / 修改 value。

  • 如果 key 不存在,对取下标操作赋值,即为新增键值对
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
}

student['score'] = 90
print(student)

运行结果如下:

  • 如果 key 已经存在,对取下标操作赋值,即为修改键值对的值。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}

student['score'] = 90
print(student)

运行结果如下:

4. 删除元素

  • 使用 pop 方法根据 key 删除对应的键值对。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}

student.pop('score')
print(student)

运行结果如下:

5. 遍历字典元素

  • 直接使用 for 循环能够获取到字典中的所有的 key,进一步的就可以取出每个值了。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}

for key in student:
    print(key, student[key])

运行结果如下:

6. 取出所有 key 和 value

  • 使用 keys 方法可以获取到字典中的所有的 key
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}

print(student.keys())

运行结果如下:

注意:此处 dict_keys 是一个特殊的类型,专门用来表示字典的所有 key。大部分元组支持的操作对于 dict_keys 同样适用。

  • 使用 values 方法可以获取到字典中的所有 value
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}

print(student.values())

运行结果如下:

注意:此处 dict_values 也是一个特殊的类型,和 dict_keys 类似。

  • 使用 items 方法可以获取到字典中所有的键值对。
python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}

print(student.items())

运行结果如下:

注意:此处 dict_items 也是一个特殊的类型,和 dict_keys 类似。


7. 合法的 key 类型

不是所有的类型都可以作为字典的 key。

字典本质上是一个 哈希表,哈希表的 key 要求是 "可哈希的",也就是可以计算出一个哈希值。

  • 可以使用 hash 函数计算某个对象的哈希值。
  • 但凡能够计算出哈希值的类型,都可以作为字典的 key。

代码如下:

python 复制代码
print(hash(0))
print(hash(3.14))
print(hash('hello'))
print(hash(True))
print(hash(()))      # () 是一个空的元组

运行结果如下:

  • 列表无法计算哈希值。
python 复制代码
print(hash([1, 2, 3]))

运行结果如下:

  • 字典也无法计算哈希值
python 复制代码
print(hash({ 'id': 1 }))

运行结果如下:

小结

字典也是一个常用的结构,字典的所有操作都是围绕 key 来展开的。

需要表示 "键值对映射" 这种场景时就可以考虑使用字典。

相关推荐
iCxhust5 小时前
C# 命令行指令 查看二进制文件
开发语言·单片机·嵌入式硬件·c#·proteus·微机原理·8088单板机
csdn_aspnet5 小时前
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
java·开发语言·算法
诸葛务农5 小时前
道路行驶条件下电动汽车永磁电机的有效使用寿命及永磁体的失效和回收再利用(下)
java·开发语言·算法
oort1235 小时前
VLStream:全开源决策式AI视频平台,赋能企业构建自主可控、降本增效的智能视觉应用介绍
大数据·开发语言·人工智能·开源·音视频·数据库架构
c238566 小时前
c/c++中的多态(上)
开发语言·c++
彷徨而立6 小时前
【C++】介绍 std::ifstream 输入文件流
开发语言·c++
郑洁文6 小时前
基于Python的Web命令执行漏洞自动化检测系统
前端·python·网络安全·自动化
罗超驿6 小时前
13.JavaScript 新手入门指南:语法、变量、流程控制全解析
开发语言·javascript
yingjie1106 小时前
Scanpy vs Seurat 深度对比:Python 与 R 的单细胞分析框架谁更强?
开发语言·python·r语言·生物信息学·单细胞转录组·seurat·scanpy
程序大视界7 小时前
【C++ 从基础到项目实战】C++(六):拷贝控制——浅拷贝与深拷贝,兼谈智能指针
开发语言·c++·cpp