Python学习笔记(三) 字典

简介: Python学习笔记(三) 字典

这篇文章将会介绍 Python 中的字典,字典是 Python 唯一的内置映射类型



1、创建字典


字典由多组键值对组成,键可以是任何不可变类型,常见的有字符串和元组,对于值没有特别要求

可以使用字面量 {} 创建字典,字典中用 , 分隔相邻项,用 : 分隔键和值

>>> # 创建一个空字典
>>> person = {}
>>> # 创建带有元素的字典
>>> person = {'name': 'Jessica', 'age': 20}

也可以使用内置函数 dict() 创建字典,其参数可以是关键字实参,或者是其他映射类型

>>> # 传入关键字实参创建字典
>>> worker1 = dict(name = 'Nancy', workerID = 200189)
>>> worker1
# {'name': 'Nancy', 'workerID': 200189}
>>> # 从其他映射类型创建字典
>>> worker2 = dict([('name', 'Tommy'), ('workerID', 201901)])
>>> worker2
# {'name': 'Tommy', 'workerID': 201901}


2、索引元素


字典是通过键索引值的,一般格式为 dict['KEY']

>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36}
>>> # 若指定的键在字典中存在,则返回对应的值
>>> dic['Apple']
# 15
>>> # 若指定的键在字典中不存在,就会引发错误,导致程序中断
>>> dic['Ant']
# KeyError

也可以用 get() 方法索引,当字典中不包含指定键时,会返回默认值 None 或其他指定值

>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36}
>>> # 参数中没指定返回值,当字典中不包含指定键时,返回默认值 None
>>> dic.get('Ant')
# None
>>> # 参数中有指定返回值,当字典中不包含指定键时,返回指定值
>>> dic.get('Ant', 0)
# 0

还可以用 setdefault() 方法索引,当字典中不包含指定键时,会返回指定值,并在字典中添加该键值对

>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36}
>>> # 若指定的键在字典中存在,则返回对应的值
>>> dic.setdefault('Apple', 49)
# 15
>>> # 若指定的键在字典中不存在,返回指定值,并在字典中添加该键值对
>>> dic.setdefault('Ant', 49)
# 49
>>> dic
# {'Apple': 15, 'Banana': 24, 'Carrot': 36, 'Ant': 49}


3、删除元素


既可以使用方法 pop(KEY)   删除字典指定的项,返回指定键所对应的值

>>> dic = {'A': 1 , 'B': 2 , 'C': 3 , 'D': 4 , 'E': 5}
>>> dic.pop('C')
# 3

也可以使用方法 popitem() 删除字典最后一项,返回所删除的项

>>> dic = {'A': 1 , 'B': 2 , 'C': 3 , 'D': 4 , 'E': 5}
>>> dic.popitem()
# ('E', 5)

还可以使用方法 clear() 删除所有字典项,这样的操作是就地执行的,不返回任何东西

>>> dic = {'A': 1 , 'B': 2 , 'C': 3 , 'D': 4 , 'E': 5}
>>> dic.clear()


4、添加元素


字典添加元素的方法有点特别,它可以通过直接赋值添加元素,这也是字典和序列之间一个很大的不同

>>> # 列表
>>> li = ['Apple', 'Banana', 'Carrot']
>>> li[0] = 'Ant'      # (修改元素) 可行,列表中的第一项变成 'Ant'
>>> li[3] = 'Dog'      # (添加元素) 不可行,IndexError: list assignment index out of range
>>> # 字典
>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36}
>>> dic['Apple'] = 30  # (修改元素) 可行,字典中键 'Apple' 对应的值变成 30
>>> dic['Dog'] = 40    # (添加元素) 可行,字典中新增一项,键为 'Dog' 值为 40

另外,update() 方法允许使用一个字典更新另一个字典

如果当前字典没有对应的键值,则添加它;如果当前字典包含键相同的项,则替换它

>>> dic1 = {'A': 1 , 'B': 2}
>>> dic2 = {'B': 3 , 'D': 4}
>>> dic1.update(dic2)
>>> dic1
# {'A': 1, 'B': 3, 'D': 4}


5、字典迭代


有三种方法,keys() 返回字典中所有键,values() 返回字典中所有值,items() 返回字典中所有项

>>> dic = {'A': 1, 'B': 2, 'C': 3}
>>> # 迭代字典中的键
>>> for key in dic.keys(): print(key)
# A
# B
# C
>>> # 迭代字典中的值
>>> for value in dic.values(): print(value)
# 1
# 2
# 3
>>> # 迭代字典中的项
>>> for item in dic.items(): print(item)
# ('A', 1)
# ('B', 2)
# ('C', 3)

这三种方法返回的都是一种叫做字典视图的类型,它们始终是字典底层的反映

>>> dic = {'A': 1, 'B': 2, 'C': 3}
>>> items = dic.items()
>>> items
# dict_items([('A', 1), ('B', 2), ('C', 3)])
>>> dic['A'] = 3
>>> items
# dict_items([('A', 3), ('B', 2), ('C', 3)])

6、字典推导


字典推导式与列表推导式类似,可用于快速创建字典,其基本格式如下:

dic = {key_expression(i):value_expression(i) for i in iterable if condition(i)}

翻译成一般语句就是:

dic = {}
for i in iterable:
    if condition(i):
        dic[key_expression(i)] = value_expression(i)
  • 示例 1:给出字符串列表,以字符串作为键、以字符串长度作为值,建立字典
>>> li = ['I', 'Love', 'Python']
>>> dic = {i:len(i) for i in li}
>>> dic
# {'I': 1, 'Love': 4, 'Python': 6}
  • 示例 2:给出原始字典,将键和值交换位置,建立新的字典
>>> old_dict = {'A': 1, 'B': 2, 'C': 3}
>>> new_dict = {v:k for k,v in old_dict.items()}
>>> new_dict
{1: 'A', 2: 'B', 3: 'C'}


7、字典排序


可以使用 sorted() 函数给字典排序,它总是返回一个序列

  • 示例 1:按键排序
>>> old = {1: 'E', 5: 'A', 2: 'D', 4: 'B', 3: 'C'}
>>> new = sorted(old.items(), key = lambda x: x[0])
>>> new
# [(1, 'E'), (2, 'D'), (3, 'C'), (4, 'B'), (5, 'A')]
  • 示例 2:按值排序
>>> old = {1: 'E', 5: 'A', 2: 'D', 4: 'B', 3: 'C'}
>>> new = sorted(old.items(), key = lambda x: x[1])
>>> new
# [(5, 'A'), (4, 'B'), (3, 'C'), (2, 'D'), (1, 'E')]

文章知识点与官方知识档案匹配,可进一步学习相关知识

目录
相关文章
|
24天前
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
17 1
|
2月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
434 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
2月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
166 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
175 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
73 1
|
2月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
117 1
|
2月前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
53 2
|
2月前
|
存储 Python
Python学习笔记编程小哥令狐~持续更新、、、 (下)
Python学习笔记编程小哥令狐~持续更新、、、 (下)
35 1
|
3月前
|
存储 JSON 索引
一文让你彻底搞懂 Python 字典是怎么实现的
一文让你彻底搞懂 Python 字典是怎么实现的
66 13
|
2月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
48 0
【免费分享编程笔记】Python学习笔记(二)

热门文章

最新文章