浪漫的数据容器:成双双对之字典

1,291 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

本文已参与「新人创作礼」活动,一起开启掘金创作之路

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

写在前面:

  • • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!

  • • 专栏简介:本专栏的核心就是:快!快!快!2周快速拿下Python,具备项目开发能力,为机器学习和深度学习做准备。

  • • 面向人群:零基础编程爱好者

  • • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待

  • • Python零基础快速入门系列

  • • 快速入门Python数据科学系列

  • • 人工智能开发环境搭建系列

  • • 机器学习系列

  • • 物体检测快速入门系列

  • • 自动驾驶物体检测系列

  • • ......

图片

@[toc]

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))

图片

2. 字典的定义

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

2.1 dict函数

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

dict?

图片

从输出的描述信息中可知,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.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]: [148], {134} : {23}}      # 分别为列表key、字典key,它们都是可变数据类型,因此不能作为key

图片

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

图片

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

图片

3.1.2 setdefault函数

图片

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

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

图片

3.2 修改

3.2.1 通过key修改


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

x['monica'] = 88
x

图片

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

图片

从上图可以看到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已不在字典中

图片

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

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

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

图片

3.4.3 clear:清空字典

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

图片

3.5 读取

3.5.1 通过key访问

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

图片

3.5.2 通过get函数访问

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

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

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

图片

3.5.3 不可使用索引访问

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

图片

3.5.4 遍历

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

图片

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

图片

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

图片

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

    图片

    3.5 字典推导式

    同列表、字典也有推导式{输出值 for 遍历的元素 in 列表变量 if 条件语句}

举例:

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

图片

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

推荐阅读:

图片

本文使用 文章同步助手 同步