第四章 字典

第四章 字典{'键':'值','名字':'电话号码'}

映射:通过名称来访问其各个值的数据结构
列表:将一系列值组合成数据结构并通过编号来访问各个值

字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下
键可能是数、字符串或元组

字典由键(必须唯一,可以是任意数据类型但是唯一即可)及其相应的组成,这种键-值对称为

键为名字,值为电话号码
每个键与其值之间都用冒号(:)分隔,项之间用逗号分隔,整个字典放在花括号内
空字典(没有任何项)用两个花括号表示{}。

phones = {'yanyu':'159368','huangjiaju':'787084','huangjiaiqnag':'784512369','yeshirong':'963214587'}

创建和使用字典

函数dict,从其他映射(如其他字典)或键-值对序列创建字典

message = [('name','yanyu'),('age',22)]
yanyu = dict(message)
yanyu#结果为:{'name': 'yanyu', 'age': 22}beyond = dict(name="huangjiaju",age=31)
beyond#结果为:{'name': 'huangjiaju', 'age': 31}

成员资格in
在字典中查找的,而不是值
在列表中查找的是,而不是索引

'''
将字符串"beyond"赋给一个空列表中索引为15的元素
这显然不可能,因为没有这样的元素
除非首先初始化列表
'''
x = []
x[15] = "beyond"#报错
#改正:初始化列表y
y = [None] * 16
y[15] = "beyond"
y#结果为:[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'beyond']'''
将字符串"beyond"赋给一个空字典的键15
'''
z = {}
z[15] = "beyond"
z#结果为:{15: 'beyond'}

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

format_map,通过一个映射来提供所需的信息

phone = {"yanyu":"1512369","jiaju":'147852','jiaqiang':"789654"}
"jiaju's phone number is {jiaju}.".format_map(phone)#结果为:"jiaju's phone number is 147852."

可指定任意数量的转换说明符,条件是所有的字段名都是包含在字典中的键

template = '''<html>
<head><title>{title}</title></head> 
<body> 
<h1>{title}</h1> 
<p>{text}</p>
</body>''' data = {'title': 'My Home Page', 'text': 'Welcome to my home page!'} 
print(template.format_map(data)) #结果为:
<html> 
<head><title>My Home Page</title></head> 
<body> 
<h1>My Home Page</h1> 
<p>Welcome to my home page!</p> 
</body>

字典方法

1,clear,删除所有的字典项,什么都不返回(或者说返回None)

d = {}
d['name'] = "beyond"
d['age'] = 31
d#结果为:{'name': 'beyond', 'age': 31}
Y = d.clear()
d#结果为:{}
print(Y)#结果为:None

x和y最初都指向同一个字典,将一个空字典赋给x来“清空”它,这对y没有任何影响,它依然指向原来的字典
要删除原来字典的所有元素,必须使用clear,这样做,y也将是空的

x = {}
y = x
x['key'] = 'value'
y#结果为:{'key': 'value'}
x = {}
x#结果为:{}
y#结果为:{'key': 'value'}
x = {}
y = x
x['key'] = 'value'
y#结果为:{'key': 'value'}
x.clear()
x#结果为:{}
y#结果为:{}

2,copy,返回一个新字典,其包含的键-值对与原来的字典相同

(这个方法执行的是浅复制,因为值本身是原件,而非副本)
原件x,副本y,替换副本中的值,原件不受影响修改副本中的值,原件会发生变化,因为原件指向的也是被修改的值

x={'name':'yanyu','habby':['eat','drink','sing']}
y = x.copy()
y['name'] = "huangjiaju"#替换
y['habby'].remove('eat')#修改
y#结果为:{'name': 'huangjiaju', 'habby': ['drink', 'sing']}
x#结果为:{'name': 'yanyu', 'habby': ['drink', 'sing']}

为避免这种问题,一种办法是执行深复制,即同时复制值及其包含的所有值
可使用模块copy中的函数deepcopy
d为原件,c为浅复制,C为深复制

浅复制:替换原件不受影响,修改(append向后追加为修改的一种)原件会受影响
深复制:与原件相互独立,与对原件操作无任何影响

from copy import deepcopy 
d = {} 
d['names'] = ['yanyu', 'beyond'] 
c = d.copy() 
C = deepcopy(d) 
d['names'].append('Huangjiaju') 
c#结果为: {'names': ['yanyu', 'beyond', 'Huangjiaju']}
C#结果为:{'names': ['yanyu', 'beyond']}
d#结果为:{'names': ['yanyu', 'beyond', 'Huangjiaju']}

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

{}.fromkeys(['name', 'age'])#结果为:{'name': None, 'age': None}

也可以直接对dict调用方法fromkeys

dict.fromkeys(['name', 'age'])#结果为:{'name': None, 'age': None}

也可提供特定的值

dict.fromkeys(['name', 'age'], '(unknown)')#结果为:{'name': '(unknown)', 'age': '(unknown)'}

4,get,为访问字典项提供了宽松的环境

如果你试图访问字典中没有的项,将引发错误;而使用get不会这样

d = {}
d['names'] = "beyond"
print(d['name'])#结果为:报错 访问不存在的键
print(d.get('name'))#结果为:None  没有引发异常,而是返回None
d.get('name',"errorover")#结果为:errorover  没有引发异常,而是返回指定的错误信息
d.get("names")#结果为:'beyond'

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

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666} 
d.items()#结果为:dict_items([('Question', 'Do you like beyond?'), ('Answer', 'Yes'), ('Sure?', 666)])

返回值属于一种名为字典视图的特殊类型dict_items

确定其长度以及对其执行成员资格检查

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666} 
it = d.items()
len(it)#结果为:3
('Sure?', 666) in it#结果为:True

视图的一个优点是不复制,它们始终是底层字典的反映,本源和视图是一致的,操作视图,本源也会跟着操作

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666} 
it = d.items()
d['Sure?'] = 0
('Sure?',666) in it#结果为:False
d['Sure?'] = 1
('Sure?',1) in it#结果为:True

将字典项复制到列表中

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666} 
list(d.items())#结果为:[('Question', 'Do you like beyond?'), ('Answer', 'Yes'), ('Sure?', 666)]

6,keys,返回一个字典视图,其中包含指定字典中的键

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666}
d.keys()#结果为:dict_keys(['Question', 'Answer', 'Sure?'])

7,pop,可用于获取与指定键相关联的,并将该键-值对从字典中删除

d = {'x': 1, 'y': 2} 
d.pop('x') #结果为:1 
d #:结果为:{'y': 2}

8,popitem,随机地弹出一个字典项

方法popitem类似于list.pop,但list.pop弹出列表中的最后一个元素,而popitem随机地弹出一个字典项,因为字典项的顺序是不确定的,没有“最后一个元素”的概念

d = {'Question': 'Do you like beyond?', 'Answer': 'Yes', 'Sure?': 666}
d.popitem()#结果为:('Sure?', 666)
d#结果为:{'Question': 'Do you like beyond?', 'Answer': 'Yes'}

字典没有与在列表末尾添加一个元素(append)对应的方法
这是因为字典是无序的,类似的方法毫无意义

9,setdefault,通过键获取相关联的值,若不包含指定的键,则自动添加指定的键值对

指定的键不存在时,setdefault返回指定的值并相应地更新字典
指定的键存在,就返回其值,并保持字典不变
与get一样,值是可选的,如下的no find和NO;如果没有指定,默认为None

d = {} 
d.setdefault('name', 'no find') #结果为:'no find' 
d #:结果为:{'name': 'no find'}d['name'] = 'beyond' 
d.setdefault('name', 'NO') #结果为:'beyond' 
d #:结果为:{'name': 'beyond'}print(d.setdefault('age'))#结果为:None
d#结果为:{'name': 'beyond', 'age': None}   不存在即添加

10,update,使用一个字典中的项来更新另一个字典

对于通过参数提供的字典,将其项添加到当前字典中
如果当前字典包含键相同的项,就替换它

 d = { 
'title': 'Python Web Site', 
'url': 'http://www.python.org', 
'changed': 'Mar 14 22:09:15 MET 2021' 
}
x = {'title': 'Python Language Website'} 
d.update(x) 
d#结果为:{'title': 'Python Language Website', 'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:15 MET 2021'}

11,values,返回一个由字典中的值组成的字典视图

不同于方法keys,方法values返回的视图可能包含重复的值

d = {} 
d[1] = 1 
d[2] = 2 
d[3] = 3 
d[4] = 1 
d.values() #结果为:dict_values([1, 2, 3, 1])

要对字典执行字符串格式设置操作,不能使用format和命名参数,而必须使用format_map

本章节介绍的新函数

函数描述
dict(seq)从键-值对、映射或关键字参数创建字典

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用梯度下降法求解一元线性回归和多元线性回归

文章目录原理以及公式【1】一元线性回归问题【2】多元线性回归问题【3】学习率【4】流程分析&#xff08;一元线性回归&#xff09;【5】流程分析&#xff08;多元线性回归&#xff09;归一化原理以及每种归一化适用的场合一元线性回归代码以及可视化结果多元线性回归代码以及可…

linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递

0. 说明本学习系列代码几乎完全摘自&#xff1a;asmtutor.com&#xff0c;如果英文可以的(也可以用谷歌浏览器翻译看)&#xff0c;可以直接看asmtutor.com上的教程系统环境搭建&#xff1a;(我用的是ubuntu18.04.4 server&#xff0c;安装gcc、g)sudo apt install nasmsudo apt…

Javascript之创建对象(原型模式)

我们创建的每个函数都有一个prototype(原型)属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象&#xff0c;它的用途是包含可以有特定类型的所有实例共享的属性和方法。 prototype就是通过构造函数而创建的那个对象的原型对象。使用原型的好处就是可以让所有对象实例…

treeset java_Java TreeSet pollLast()方法与示例

treeset javaTreeSet类pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 条件、循环及其他语句

第五章 条件、循环及其他语句 再谈print和import print现在实际上是一个函数 1&#xff0c;打印多个参数 用逗号分隔&#xff0c;打印多个表达式 sep自定义分隔符&#xff0c;默认空格 end自定义结束字符串&#xff0c;默认换行 print("beyond",yanyu,23)#结果为…

两种方法将Android NDK samples中hello-neon改成C++

一、第一种方法&#xff1a;1.修改helloneon.c 中代码 a.将 char* str; 改为 char str[512] {0}; b.将 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改为 sprintf(str, "FIR Filter benchmark:\nC ve…

【视觉项目】【day6】8.26关于matchTemplate()以及NCC的思考整理

NCC与matchTemplate()函数中match_method TM_CCOEFF_NORMED是否一样&#xff1f; 先看公式&#xff1a; TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:归一化的相关性系数匹配方法 NCC:normalized cross correlation:归一化互相关系数 公式是一样的。 参考&#xff1a; 模板匹配的几…

linux待机流程,Linux睡眠喚醒機制--Kernel態

一、對於休眠(suspend)的簡單介紹 在Linux中,休眠主要分三個主要的步驟: 1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下…

strictmath_Java StrictMath log1p()方法与示例

strictmathStrictMath类log1p()方法 (StrictMath Class log1p() method) log1p() method is available in java.lang package. log1p()方法在java.lang包中可用。 log1p() method is used to return (the logarithm of the sum of the given argument and 1 like log(1d) in th…

第六章 抽象

第六章 抽象 自定义函数 要判断某个对象是否可调用&#xff0c;可使用内置函数callable import math x 1 y math.sqrt callable(x)#结果为&#xff1a;False callable(y)#结果为&#xff1a;True使用def&#xff08;表示定义函数&#xff09;语句&#xff0c;来定义函数 …

HTTP 状态代码

如果向您的服务器发出了某项请求要求显示您网站上的某个网页&#xff08;例如&#xff0c;当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时&#xff09;&#xff0c;那么&#xff0c;您的服务器会返回 HTTP 状态代码以响应该请求。 此状态代码提供了有关请求状态的信…

TensorFlow的可训练变量和自动求导机制

文章目录一些概念、函数、用法TensorFlow实现一元线性回归TensorFlow实现多元线性回归一些概念、函数、用法 对象Variable 创建对象Variable&#xff1a; tf.Variable(initial_value,dtype)利用这个方法&#xff0c;默认整数为int32&#xff0c;浮点数为float32&#xff0c;…

linux samba安装失败,用aptitude安装samba失败

版本&#xff1a;You are using Ubuntu 10.04 LTS- the Lucid Lynx - released in April 2010 and supported until April 2013.root下执行aptitude install sambaReading package lists... DoneBuilding dependency treeReading state information... DoneReading extended st…

django第二个项目--使用模板做一个站点访问计数器

上一节讲述了django和第一个项目HelloWorld&#xff0c;这节我们讲述如何使用模板&#xff0c;并做一个简单的站点访问计数器。 1、建立模板 在myblog模块文件夹&#xff08;即包含__init__.py的文件夹)下面新建一个文件夹templates&#xff0c;用于存放HTML模板&#xff0c;在…

strictmath_Java StrictMath log10()方法与示例

strictmathStrictMath类log10()方法 (StrictMath Class log10() method) log10() method is available in java.lang package. log10()方法在java.lang包中可用。 log10() method is used to return the logarithm of the given (base 10) of the given argument in the method…

30、深入理解计算机系统笔记,并发编程(concurrent)(2)

1、共享变量 1&#xff09;线程存储模型 线程由内核自动调度&#xff0c;每个线程都有它自己的线程上下文&#xff08;thread context&#xff09;&#xff0c;包括一个惟一的整数线程ID&#xff08;Thread ID,TID&#xff09;&#xff0c;栈&#xff0c;栈指针&#xff0c;程序…

PostgreSQL在何处处理 sql查询之十三

继续&#xff1a; /*--------------------* grouping_planner* Perform planning steps related to grouping, aggregation, etc.* This primarily means adding top-level processing to the basic* query plan produced by query_planner.** tuple_fraction i…

【视觉项目】基于梯度的NCC模板匹配代码以及效果

文章目录流程分析工程代码【1】NCC代码【Ⅰ】sttPxGrdnt结构体【Ⅱ】sttTemplateModel模板结构体【Ⅲ】calcAccNCC计算ncc系数函数【Ⅳ】searchNcc NCC模板匹配函数【Ⅴ】searchSecondNcc 二级搜索&#xff1a;在某一特定点周围再以步进为1搜索【2】测试图转外轮廓【Ⅰ】孔洞填…

第七章 再谈抽象

第七章 再谈抽象 对象魔法 多态&#xff1a;可对不同类型的对象执行相同的操作&#xff0c;而这些操作就像“被施了魔法”一样能够正常运行。(即&#xff1a;无需知道对象的内部细节就可使用它)&#xff08;无需知道对象所属的类&#xff08;对象的类型&#xff09;就能调用其…

c语言math乘法,JavaScript用Math.imul()方法进行整数相乘

1. 基本概念Math.imul()方法用于计算两个32位整数的乘积&#xff0c;它的结果也是32位的整数。JavaScript的Number类型同时包含了整数和浮点数&#xff0c;它没有专门的整型和浮点型。因此&#xff0c;Math.imul()方法能提供类似C语言的整数相乘的功能。我们将Math.imul()方法的…