python_day10_字典1

目录

字典_特点_4种创建方式_普通_dict_zip_formkeys

字典

  • 字典是“键值对”的无序可变序列,字典中的每一个元素都是一个“键值对”,包含:“键对象”和“值对象”。(即成对存在,每一个元素为一个二元组)可以通过“键对象”实现快速获取、删除、更新对应的“值对象”。
    注1:从数学上理解,它是二元组(键,值)的集合,是平面点集,只不过这里横纵坐标并不是简单的数字,键类似于identity,即地址;值类似于value,即值或者说是内容。

  • 列表中,我们通过下标数字找到对应的对象字典中通过键对象找到对应的值对象。“键”是任意的不可变数据(我这里理解为地址和值的关系,也即identityvalue的关系),比如:整数、浮点数、字符串、元组。但是,列表、集合、字典这些可变对象,不能作为“键”。并且“键”不可重复。

  • “值”可以是任何的数据,并且可重复

(注:键值对 ?既然是叫对,说明是成对存在。键和值链接在一起,类似于内存单元中一个地址链接着一个值)

一个典型的字典的定义方式:
a={‘name’:’liuan’,’age’:18,’job’:’CTO’}

(注:这是3个键值对,键:name、age、job。值:liuan、18、CTO)
见名知意,这其实就是我们生活中的(新华)字典。所以字典的关键字以dict为名,也即dictionary

注2:其实不管是编程语言还是一些数学教材,有很多符号都是根据英文单词来命名的,多查一查单词可以帮助我们来理解编程或者数学中的专业术语

字典的创建

  1. 我们可以通过 {}、dict() 来创建字典对象。
>>>a={‘name’:’liuan’,’age’:18,’job’:CTO}
>>>b=dict(name=’liuan’,age=18,job=’CTO’)
>>>a=dict([(‘name’,’liuan’),(‘age’,18)])
>>>c={}     #空的字典对象
>>>d=dict()     #空的字典对象
  1. 通过 zip() 创建字典对象
>>>k=[‘name’,’age’,’job’]
>>>v=[‘liuan’,18,’CTO’]
>>>d=dict(zip(k,v))
>>>d
{‘name’:’liuan’,’age’:18,’job’:’CTO’}
  1. 通过 fromkeys 创建值为空的字典
>>>a=dict.fromkeys([‘name’,’age’,’job’])
>>>a
{‘name‘:None,’age’:None,’job’:None}

字典元素的访问

为了测试各种访问方法,我们这里先设定一个字典对象(你当然可以设定为其他对象,比如你自己):
a={‘name’:’liuan’,’age’:18,’job’:’cto’}

  1. 通过 [键] 获得值。若键不存在,则抛出异常。
>>>a={‘name’:’liuan’,’age’:18,’job’:’cto’}
>>>a[‘name’]
‘liuan’
>>>a[‘age’]
18
>>>a[‘job’]
‘cto’
>>>a[‘sex’]
Error!
  1. 通过 get() 得到值,推荐使用。优点是:指定键不存在,返回None;也可以设定指定键不存在时默认返回的对象,推荐使用get()来获取“值对象”。
>>>a.get(‘name’)
‘liuan’
>>>a.get(‘sex’,’一个男孩’)
一个男孩
  1. 列出所有的键值对
>>>a.items()
dict_items([(‘name’,’liuan’),(‘age’,18),(‘job’,’cto’)])
  1. 列出所有的键,列出所有的值
>>>a.keys()
dict_keys([‘name’,’age’,’job’])
>>>a.values()
dict_values([‘liuan’,18,’cto’])
  1. len() 键值对的个数
  2. 检测一个“键”是否在字典对象中
>>>a={‘name’:liuan’,’age’:18}
>>>’name’	 in a
True

字典_元素的添加_修改_删除

  1. 给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对。否则,则新增键值对。
>>>a={‘name’:’liuan’,’age’:18,’job’:’cto’}
>>>a[‘sex’]=’male’
>>>a[‘age’]=16
>>>a
{‘name’:’liuan’,’age’:16,’job’:’cto’,’sex’:’male’}
  1. 使用 update() 将新字典中所有键值对全部添加到旧字典对象上。如果key有重复,则直接覆盖。
>>>a={‘name’:’liuan’,’age’:18,’job’:’cto’}
>>>b={‘name’:’liuxiaoyi’,’money’:10,’sex’:’female’}
>>>a.update(b)
>>>a
{‘name’:’liuxiaoyi’,’age’:18,’job’:’cto’,’money’:10,’sex’:’female’}
  1. 字典中元素的删除,可以使用 del() 方法,或者clear()删除所有键值对; pop() 删除指定键值对,并返回对应的“值对象”
>>>a={‘name’:’liuan’,’age’:18,’job’:’cto’}
>>>del(a[‘name’])     #或者del a[‘name’]
>>>a
{‘age’:18,’job’:’cto’}
>>>b=a.pop(‘age’)
>>>b
18
  1. popitem() :随机删除和返回该键值对。字典是“无序可变序列”,因此没有第一个元素、最后一个元素一说。Popitem弹出随机的项,因为字典并没有最后一个元素等顺序的概念。若想一个接一个的移除并处理项,这个方法就非常有效。
>>>a={‘name’:’liuxiaoxiao’,’age’:18,’job’:’cto’}
>>>a.popitem()
(‘job’,’cto’)
>>>a.popitem()
(‘age’,18)
>>>a
{‘name’:’liuxiaoxiao’}

字典_序列解包用于列表元组字典

序列解包

序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值。

>>>x,y,z=(20,10,30)
>>>x
20
>>>y
10
>>>z
30
>>>(a,b,c)=(1,2,3)
>>>a
1
>>>[a,b,c]=[10,20,30]
>>>a
10
  • 序列解包用于字典时,默认是对键进行操作;如果需要对键值对进行操作,则需要使用 items() ;如果需要对“值”进行操作,则需要使用 values();
>>>s={‘name’:’liuxiaoxiao’,’age’:18,’job’:’cto’}
>>>name,age,job=s     #默认对键进行操作
>>>name
‘name’
>>>name,age,job=s.items()     #对键值对进行操作
>>>name
(‘name’,’liuxiaoxiao’)
>>>name,age,job=s.values()     #对值对象进行操作
>>>name
‘liuxiaoxiao’

字典_复杂表格数据存储_列表和字典综合嵌套

见下面表格:

姓名 年龄 薪资 城市
刘小小 18 30000 北京
刘中中 19 20000 上海
刘大大 20 10000 深圳

Problem

上一篇:day10:第10讲-函数三


下一篇:对Spring的理解