python笔记:第四章使用字典

这篇具有很好参考价值的文章主要介绍了python笔记:第四章使用字典。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.1 概述

说白了就是键值对的映射关系

不会丢失数据本身关联的结构,但不关注数据的顺序

是一种可变类型

格式:dic = {键:值, 键:值}
  • 键的类型:字典的键可以是任何不可变的类型,如浮点数,字符串,元组

1.2 函数dict

可以从其他映射或键值对创建字典

items = [('name', 'Gumby'), ('age', 42)]
d =dict(items)
print(d)
> {'name': 'Gumby', 'age': 42}
d = dict(name='Gumby', age=42)
print(d)
> {'name': 'Gumby', 'age': 42}

1.3 字典的基本操作

num = len(d) # 返回字典的键值对数量
str1 = d[键] # 参数为键 返回值为对应的值
d[键] = '值' # 将tom赋值给name1键
test = 键 in 字典名字 # 检查name3键是否在字典中
d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12, 
    'name_c':'lily', 'age3':14}
num = len(d) # 返回字典的键值对数量
print('num=' + str(num))
> num=6
str1 = d['name_a'] # 参数为键 返回值为对应的值
print('name_a=' + str1)
> name_a=Gumby
d['name_a'] = 'tom' # 将tom赋值给name1键
print('name_a=' + d['name_a'])
> name_a=tom
test = 'name_c' in d # 检查name3键是否在字典中
print(test)
> True

1.4 与format相结合

将字符串格式设置功能用于字典

使用format_map将两者结合起来

phonebook = {'bob' : 1211, 'tom': 2322}
str1 = "I am bob. My phone is {bob}".format_map(phonebook)
print(str1)
> I am bob. My phone is 1211

1.5 字典常用方法

1.5.1 clear删除所有字典项

就地执行,无返回值

d = {
    'name_a':'Gumby', 'age1':42, 
    'name_b':'bob', 'age2':12, 
    'name_c':'lily', 'age3':14}
d.clear()
print(d)
> {}

python中的变量赋值,是将变量名指向该地址,对该变量名的字典操作,实际上是对该地址存储的字典进行操作,如:

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12, 
    'name_c':'lily', 'age3':14}
x = d
x.clear()
print(x)
print(d)
> {}
> {}   # 发现两个字典均被清空

若将x再次赋其他值,对原来的字典没有影响

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12, 
    'name_c':'lily', 'age3':14}
x = {}
x.clear()
print(d)
print(x)
>
{'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12, 'name_c': 'lily', 'age3': 14}
{}

1.5.2 copy浅复制与深复制

浅复制

返回一个新字典,与原来的字典完全相同(浅复制)

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12}
x = d.copy()
print(d)
print(x)
> 
{'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12}
{'name_a': 'Gumby', 'age1': 42, 'name_b': 'bob', 'age2': 12}

浅复制要分两种情况进行讨论:

1)当浅复制的值是不可变对象(字符串、元组、数值类型)时和“赋值”的情况一样,对象的id值(id()函数用于获取对象的内存地址)与浅复制原来的值相同。

2)当浅复制的值是可变对象(列表、字典、集合)时会产生一个“不是那么独立的对象”存在。有两种情况:

  • 第一种情况:复制的对象中无复杂子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。

  • 第二种情况:复制的对象中有复杂子对象(例如列表中的一个子元素是一个列表),如果不改变其中复杂子对象,浅复制的值改变并不会影响原来的值。 但是改变原来的值中的复杂子对象的值会影响浅复制的值。

参考:Python中的赋值(复制)、浅拷贝与深拷贝 - 知乎 (zhihu.com)

深复制

模块copy中的deepcopy 可以同时复制值以及包含的所有值

from copy import deepcopy
d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12}
x = deepcopy(d) # 深
y = d.copy() # 浅
x.clear()
print(d)
print(y)

1.5.3 fromkeys 按条件创建字典

创建一个新字典,其中包含指定的键,且每个键对应的值都是None

d = dict.fromkeys(['name','age'])
print(d)
> {'name': None, 'age': None}

若不想使用默认值None 可以提供特定的值

d = dict.fromkeys(['name','age'], 'default')
print(d)
> {'name': 'default', 'age': 'default'}

1.5.4 get 通过键获取值

原来的直接通过键获取对应的值时,可能因为字典中没有该键而报错。

d = dict.fromkeys(['name','age'], 'default')
print(d['weight'])
> 
    print(d['weight'])
          ~^^^^^^^^^^
KeyError: 'weight'

而get方法下,寻找不存在的键值时,会返回None(可指定),不会报错

d = dict.fromkeys(['name','age'], 'default')
print(d.get('weight'))
> None

指定失败返回值为 N/A (可用于返回错误信息)

d = dict.fromkeys(['name','age'], 'default')
print(d.get('name', 'N/A'))
> N/A

查找成功,正常返回对应值

d = dict.fromkeys(['name','age'], 'default')
print(d.get('name', 'N/A'))
> default

1.5.5 items 将字典变成列表输出

返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式,顺序不固定

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12}
li = d.items()
print(li)
> dict_items([('name_a', 'Gumby'), ('age1', 42), ('name_b', 'bob'), ('age2', 12)])

返回值属于字典视图的特殊类型,特点是不复制,始终是原字典的反映,随原字典改变而改变

d['name_a'] = 'tom' # 修改原字典
print(li)
> 
dict_items([('name_a', 'tom'), ('age1', 42), ('name_b', 'bob'), ('age2', 12)])

1.5.6 keys 返回字典的键

返回值为字典视图

d = {
    'name_a' :'Gumby', 'age1':42, 
    'name_b' :'bob', 'age2':12}
li = d.keys()
print(li)
> dict_keys(['name_a', 'age1', 'name_b', 'age2'])

1.5.7 pop获取键对应的值,并删除键值

d = {'name_a' :'Gumby', 'age1':42}
li = d.pop('name_a')
print(li)
print(d)
>
Gumby
{'age1': 42}

1.5.8 popitem “弹出”一组键值对

返回一组键值对,并从字典中删去该键值对,与列表中的pop方法类似,只是字典没有最后一位的概念

书上说这里会随机弹出,但实际运行情况是弹出最后一对。查了一下文档,发现python3.6以后不再是随机弹出,即弹出最后一对

d = {'name_a' :'Gumby', 'age1':42}
print(d.popitem())
print(d.popitem())
print(d)
> 
('age1', 42)
('name_a', 'Gumby')
{}
d = {'name_a' :'Gumby', 'age1':42}
d_len = len(d.items())
print(d_len)
i = 0
while(i < d_len):
    print(d.popitem())
    i = i + 1
> 
2
('age1', 42)
('name_a', 'Gumby')

1.5.9 setdefault 获取指定键值 无则添加

有点像get 但对于找不到指定的键时,会添加指定的键值

d = {}
print(d.setdefault('name', 'None'))
print(d)
> 
None
{'name': 'None'}

1.5.10 update 使用A字典的项更新B字典

d1 = {'name': 'bob', 'age': 12}
d2 = {'name': 'tom'}
d1.update(d2)
print(d1)
> {'name': 'tom', 'age': 12}

1.5.11 values 返回字典的值

不同于键的唯一性,values的返回值可能有相同值

d1 = {'name': 'bob', 'age': 60, 'weight': 60}
print(d1.values())
> dict_values(['bob', 60, 60])

返回类型同样为字典视图文章来源地址https://www.toymoban.com/news/detail-534627.html

到了这里,关于python笔记:第四章使用字典的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络-笔记-第四章-网络层

    一、第一章——计算机网络概述 二、第二章——物理层 三、第三章——数据链路层 四、第四章——网络层 五、第五章——运输层 六、第六章——应用层 目录 ​​​​​​​ 四、第四章——网络层 1、网络层概述 (1)虚电路服务——面向连接 (2)虚电路服务——无连接

    2024年02月11日
    浏览(49)
  • JAVA学习笔记——第四章 运算符

    🔥 博客主页 : A_SHOWY 🎥 系列专栏 :力扣刷题总结录 数据结构  云计算  数字图像处理  力扣每日一题_ 运算符是一种特殊的符号,用于表示数据的运算、赋值和比较 取模 %的本质: a - (int)a / b * b//当a是小数时 自增 独立语句使用时,++i和i++没有区别的。但是如果作

    2024年01月20日
    浏览(60)
  • 西瓜书读书笔记整理(五)—— 第四章 决策树

    4.1.1 什么是决策树算法 决策树算法 是一种通过构建 树形结构 进行分类和回归的机器学习算法。 决策树由结点 (node) 和有向边 (directed edge) 组成。结点有两种类型:内部结点 (internal node) 和叶结点 ( leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。 4.1.2 决策树学习

    2024年02月13日
    浏览(49)
  • 计算机网络(王道考研)笔记个人整理——第四章

    主要任务:把 分组 从源端传到目的端,为分组交换网上的不同主机提供通信服务。 传输单位:数据报 功能 路由选择和分组转发(最短路径) 异构网络互联 拥塞控制:若所有结点来不及接收分组,而要丢弃大量分组,则处于拥塞状态。因此要采取一定措施缓解拥塞。解决方

    2024年04月14日
    浏览(56)
  • 【UnityShader入门精要学习笔记】第四章(5)坐标空间

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年01月21日
    浏览(48)
  • Python第四章作业(初级)

    任务描述 本关任务:编写一个无参无返回值函数的小程序。 相关知识 为了完成本关任务,你需要掌握: 无参无返回值函数 无参无返回值函数 定义一个无参数、无返回值的函数 print_hi_human(),调用函数时可以让计算机向世界发出问候,在函数中输出“人类,你好!”。‪‬

    2024年02月02日
    浏览(110)
  • 《Linux操作系统编程》第四章 屏幕编程器vi : 了解屏幕编辑器vi的概述和基本操作命令

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(68)
  • 【UnityShader入门精要学习笔记】第四章(3)矩阵的性质

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年02月02日
    浏览(43)
  • Rx.NET in Action 第四章学习笔记

    《Rx.NET in Action》这一部共分八章,涵盖了Rx 关键模块——**Observable(可观察序列) 和 Observer(观察者)**的全部功能,以及如何创建它们、连接它们和控制它们之间的关系。 然后,您将学习如何使用强大的 Rx 处理器构建复杂的 Rx 管道。您将学习使用处理器查询 单个 Observable(可观

    2024年02月12日
    浏览(64)
  • 【UnityShader入门精要学习笔记】第四章(2)点和向量

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年01月17日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包