【Python零基础快速入门系列 | 07】浪漫的数据容器:成双成对之字典

本文详细介绍了Python字典的基础知识,包括字典的定义、特性、创建方式以及常用操作如添加、修改、删除元素的方法。此外,还讲解了字典的遍历方式和字典推导式,帮助初学者快速掌握字典的使用。

这是机器未来的第11篇文章

原文首发链接:https://blog.youkuaiyun.com/RobotFutures/article/details/125038890

在这里插入图片描述

《Python零基础快速入门系列》快速导航:


1. 字典概述

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示

d = {key1:value1, key2:value2}

字典的特性:

  • 字典的key必须为不可变数据类型,例如数值类型、字符串、元组类型
  • 字典的key不可以重复,若定义重复则后面的键值会覆盖前面的,值是可以重复的;
  • 字典是无序的,所以无法通过数值索引来访问,必须通过key来访问

举例:

x = {'tom':99, 'tany':66, 1 : 2, ('imgs/zzz/1.jpg', 'imgs/zzz/2.jpg') : 69.3, 'skills':['english', 'programing', 'play football'], 'tom':60}
print(x, type(x))

1

2. 字典的定义

字典的定义可以通过dict函数和花括号{}来定义。

2.1 dict函数

首先看一下dict()函数的描述:

dict?

1-1从输出的描述信息中可知,dict可支持多个参数:

  • 可为空,为空时则创建一个空字典
x = dict()
print(x, type(x))

{} <class ‘dict’>

  • 不为空,且参数为1个参数,且参数为映射对象key-value键值对
x = dict({'one':1, 'two':2})
x

{‘one’: 1, ‘two’: 2}

  • 不为空,参数为多个key-value键值对
x = dict(one=1, two=2, three=3)     # 注意:one,two,three输入的参数不是字符串,创建后变为字符串
x

{‘one’: 1, ‘two’: 2, ‘three’: 3}

2.2 花括号{}

  • 空字典
x = {}
print(x, type(x))

{} <class ‘dict’>

  • 有数据的字典
x = {'tom':99, 'tany':66}
print(x, type(x))

2

2.3 字典的特性

  • 字典的key必须为不可变数据类型,例如数值类型、字符串、元组类型
x2 = {'tom':99, 1.2:3.4, 7+8j : 1+2j, (1,2):(3, 4)} # key分别为字符串、浮点数值类型、复数数值类型、元组,他们都是不可变数据类型
print(x2, type(x2))

{‘tom’: 99, 1.2: 3.4, (7+8j): (1+2j), (1, 2): (3, 4)} <class ‘dict’>

异常的数据定义

x3 = {[12, 3, 4]: [1, 4, 8], {1, 3, 4} : {23}}      # 分别为列表key、字典key,它们都是可变数据类型,因此不能作为key

4

  • 字典的key不可以重复,若重复,则后值会覆盖前值;值可重复
x4 = {'name':'chairs', 'score':68, 'score' : 89}
print(x4, type(x4))

5

3. 字典的常用用法

用dir函数查询字典变量支持的属性和方法

x = {'tom':99, 'tany':66}
dir(x)

[‘class’,
contains’,
delattr’,
delitem’,
dir’,
doc’,
eq’,
format’,
ge’,
getattribute’,
getitem’,
gt’,
hash’,
init’,
init_subclass’,
iter’,
le’,
len’,
lt’,
ne’,
new’,
reduce’,
reduce_ex’,
repr’,
setattr’,
setitem’,
sizeof’,
str’,
subclasshook’,
‘clear’,
‘copy’,
‘fromkeys’,
‘get’,
‘items’,
‘keys’,
‘pop’,
‘popitem’,
‘setdefault’,
‘update’,
‘values’]

3.1 添加

3.1.1 通过添加新key添加

当key不存在时,添加新键值对

x = {}
x['jessi'] = 66			
x

6

3.1.2 setdefault函数

7使用setdefault可以用来添加新元素,可以仅添加key,此时值默认为None,也可key和value都配置。

x.setdefault('monica')
x.setdefault('lucy', 100)
x

8

3.2 修改

3.2.1 通过key修改


x = {}
x['jessi'] = 66
x.setdefault('monica')
x

x['monica'] = 88
x

9

3.2.2 update方法:用一个字典去更新另一个字典

用字典A去更新字典B:

  • 如果字典A中的元素在字典B中存在,则用A中的值更新B中的值;
  • 如果字典A中的元素不存在字典B,则将其天机道到字典B中;
xa = {'jessi':88, 'monica':87}
xb = {'jessi':100, 'lucy':66}       # jessi同时存在与xa和xb中,用xb中的jessi的值更新xa的jessi值;lucy不存在于xa中,则直接添加到xa中
xa.update(xb)
xa

10从上图可以看到xa中的jessi的值被修改为xb的jessi的值了,xb中的lucy也添加到xa中了。

3.3 删除

3.4.1 pop指定key取一个元素并从原字典删除

x = {'jessi': 100, 'monica': 87, 'lucy': 66}
x.pop('lucy')           # 从字典中取出lucy的值,并从字典删除lucy
x       				# 打印字典,可知lucy已不在字典中

11

3.4.2 popitem随机取一个元素并从原字典删除

注:3.7以前的版本是随机删除一个键值对,在3.7及以后版本是删除最后添加的键值对

x = {'jessi': 100, 'monica': 87, 'lucy': 66}
x.popitem()     
x

12

3.4.3 clear:清空字典

x = {'jessi': 100, 'monica': 87, 'lucy': 66}
x.clear()
x

13

3.5 读取

3.5.1 通过key访问

x = {'jessi': 100, 'monica': 87, 'lucy': 66}
x['jessi'] = 68
x

image-20220523221507705

3.5.2 通过get函数访问

get方法还可以在找不到时返回默认值。

x = {'jessi': 100, 'monica': 87, 'lucy': 66}
x.get('jessi')

x.get('tom', 60)        # 当不存在时可以赋默认值

16

3.5.3 不可使用索引访问

字典是无序的,所以无法通过数值索引来访问,必须通过key来访问
17

3.5.4 遍历

  • 遍历字典
    仅指定字典变量名时默认遍历keys
x = {'jessi': 100, 'monica': 87, 'lucy': 66}
for item in x:          # 仅指定字典变量名时默认遍历keys
    print(item)

18

  • 遍历keys:d.keys()
    方法keys()返回给定字典中可用的所有键的列表。
x = {'jessi': 100, 'monica': 87, 'lucy': 66}
for item in x.keys():          # 指定遍历字典keys
    print(item)

19

  • d.values()
    方法values()返回给定字典中可用的所有值的列表。
x = {'jessi': 100, 'monica': 87, 'lucy': 66}
for item in x.values():          # 指定遍历字典values
    print(item)

20

  • d.items()
    函数以列表返回可遍历的(键, 值) 元组数组
x = {'jessi': 100, 'monica': 87, 'lucy': 66}
for item in x.items():          # 指定遍历字典键值对
    print(item)

21

3.5 字典推导式

同列表、字典也有推导式

{输出值 for 遍历的元素 in 列表变量 if 条件语句}

举例:

x = {'jessi': 100, 'monica': 87, 'lucy': 66}
{key:value for key, value in x.items() if value>=80}        # 查找分数大于等于80的同学

22

写在末尾:

  • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
  • 专栏简介:本专栏的核心就是:快!快!快!2周快速拿下Python,具备项目开发能力,为机器学习和深度学习做准备。
  • 面向人群:零基础编程爱好者
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待
    • Python零基础快速入门系列
    • 快速入门Python数据科学系列
    • 人工智能开发环境搭建系列
    • 机器学习系列
    • 物体检测快速入门系列
    • 自动驾驶物体检测系列

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器未来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值