对于新公司如何让其做网站推广,低价网站建设,重庆网站建设多少钱,wordpress 小刀娱乐第四章 字典{键:值,名字:电话号码}
映射#xff1a;通过名称来访问其各个值的数据结构 列表#xff1a;将一系列值组合成数据结构并通过编号来访问各个值
字典是Python中唯一的内置映射类型#xff0c;其中的值不按顺序排列#xff0c;而是存储在键下 键可能是数、字符串…第四章 字典{键:值,名字:电话号码}
映射通过名称来访问其各个值的数据结构 列表将一系列值组合成数据结构并通过编号来访问各个值
字典是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(namehuangjiaju,age31)
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赋给一个空字典的键15z {}
z[15] beyond
z#结果为{15: beyond}将字符串格式设置功能用于字典
format_map通过一个映射来提供所需的信息
phone {yanyu:1512369,jiaju:147852,jiaqiang:789654}
jiajus phone number is {jiaju}..format_map(phone)#结果为jiajus phone number is 147852.可指定任意数量的转换说明符条件是所有的字段名都是包含在字典中的键
template html
headtitle{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
headtitleMy Home Page/title/head
body
h1My Home Page/h1
pWelcome to my home page!/p
/body字典方法
1clear删除所有的字典项什么都不返回或者说返回None
d {}
d[name] beyond
d[age] 31
d#结果为{name: beyond, age: 31}
Y d.clear()
d#结果为{}
print(Y)#结果为Nonex和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#结果为{}2copy返回一个新字典其包含的键-值对与原来的字典相同
这个方法执行的是浅复制因为值本身是原件而非副本 原件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]}3fromkeys创建一个新字典其中包含指定的键且每个键对应的值都是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)}4get为访问字典项提供了宽松的环境
如果你试图访问字典中没有的项将引发错误而使用get不会这样
d {}
d[names] beyond
print(d[name])#结果为报错 访问不存在的键
print(d.get(name))#结果为None 没有引发异常而是返回None
d.get(name,errorover)#结果为errorover 没有引发异常而是返回指定的错误信息
d.get(names)#结果为beyond5items返回一个包含所有字典项的列表字典视图其中每个元素都为(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)]6keys返回一个字典视图其中包含指定字典中的键
d {Question: Do you like beyond, Answer: Yes, Sure?: 666}
d.keys()#结果为dict_keys([Question, Answer, Sure?])7pop可用于获取与指定键相关联的值并将该键-值对从字典中删除
d {x: 1, y: 2}
d.pop(x) #结果为1
d #结果为{y: 2}8popitem随机地弹出一个字典项
方法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)对应的方法 这是因为字典是无序的类似的方法毫无意义
9setdefault通过键获取相关联的值若不包含指定的键则自动添加指定的键值对
指定的键不存在时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} 不存在即添加10update使用一个字典中的项来更新另一个字典
对于通过参数提供的字典将其项添加到当前字典中 如果当前字典包含键相同的项就替换它 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}11values返回一个由字典中的值组成的字典视图
不同于方法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)从键-值对、映射或关键字参数创建字典