2021-05-19

字典

字典是’键值对’的无序可变序列。列表、字典、集合这些可变对象,不能作为’键’。并且’键’不可重复。'值’可以是任意的数据,并且可重复。

字典的创建

  1. 我们可以通过{}、dict()来创建字典对象。
a={'name':'lynn','age':18,'job':'planner'}

b=dict(name='lynn',age=18,job='planner'}

d=dict([('name','lynn'),('age',18)])

print(a.get('name'))
  1. 通过zip()创建字典对象
k=['name','age','job']

v=['lynn',18,'techer']

d=dict(zip(k,v))

print(d)
  1. 通过fromkeys创建值为空的字典
a=dict.fromkeys(['name','age','job'])

print(a)

字典元素的访问

为了测试各种访问方法,我们这里设定一个字典对象:

a={'name':'lynn','age':18,'job':'planner'}
  1. 通过[键]获得’值’。若键不存在,则抛出异常
a={'name':'lynn','age':18,'job':'planner'}

print(a['name'])
  1. 通过get()方法获得值,推荐使用。优点:指定键不存在,返回None;也可以设定指定键不存在时默认返回的对象。推荐使用get()获取’值对象’。
a={'name':'lynn','age':18,'job':'planner'}

a.get('name')

print(a.get('sex','女'))
  1. 列出所有键值对
a.items()
  1. 列出所有的键,列出所有的值
a.keys()

a.values()
  1. len()键值对的个数

  2. 检测一个’键’是否在字典中

print('name' in a)

字典元素添加、修改、删除

  1. 给字典新增’键值对’。如果’键’已经存在,则覆盖旧得键。如果键不存在,则新增’键值对’。
a={'name':'lynn','age':18,'job':'planner'}
a['add']='南京路1号'
a['age']=16
print(a)
  1. 使用update()将新字典中所有键值对全部添加到旧字典对象上。如果key有重复,直接覆盖。
a={'name':'lynn','age':18,'job':'planner'}
b={'name':'ben','age':120,'sex':'man'}
a.update(b)
print(a)
  1. 字典中元素的删除,可以用del()或者clear()全删;pop()删除指定键值对,并返回对应的’值对象’。
b=a.pop('age')
  1. popitem()随机删除和返回该键值对
a.popitem()

序列解包

序列解包可以用于元祖、列表、字典,对多个变量赋值。

x,y,z=(20,30,10)

(a,b,c)=(20,30,10)

[a,b,c]=(20,30,10)

字典序列解包

s={'name':'ben','age':18,'sex':'man'}

a,b,c=s #接收键

e,d,f=s.values() #接收值

h,i,j=s.items() #接收键值对

复杂表格数据存储

表格数据使用字典和列表存储,并实现访问。

r1={'name':'ben','age':18,'city':'BJ'}
r2={'name':'joe','age':19,'city':'SH'}
r3={'name':'cici','age':20,'city':'SZ'}
tb=[r1,r2,r3]
#获得第二行人的城市
print(tb[1].get('city'))
#打印所有的薪资
for i in range(len(tb)):
    print(tb[i].get('city'))
#打印表的所有数据
for i in range(len(tb)):
    print(tb[i].get('name'),tb[i].get('age'),tb[i].get('city'))

字典核心底层原理(重要)

字典对象的核心是散列表。散列表是一个稀疏数组(总有空白元素的数组)。数组的每个单元叫做bucket。每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。通过偏移量来读取指定bucket。

将一个键值对放进字典的底层过程

第一步计算key的散列值。Python中可以通过hash()来计算。

拿出计算出的散列值的最后面3位数‘101’作为偏移量,十进制是数字5。我们查看偏移量5对应的bucket是否为空。则把键值对放进去。如果不为空,则依次取后面3位作为偏移量,直到找到为空的bucket将键值对放进去。
在这里插入图片描述

根据键查找‘键值对’的底层过程

a.get(‘name’)

第一步,我们计算’name’对象的散列值:

bin(hash(‘name’))

和存储的底层流程算法一致。取散列值不同位置的数字,然后查看偏移量对应的bucket是否为空。如果为空,返回None。如果不为空,则将这个bucket的键对象计算对应散列值,和我们的散列值进行比较。相等则返回对应’值对象’。不相等,则重新计算偏移量。依次取完后仍然没找到,则返回None。
在这里插入图片描述
在这里插入图片描述

集合

集合无序可变,元素不能重复。实际上,集合底层是字典实现,只有字典的‘键对象’。因此是不能重复且唯一的。

集合创建和删除

  1. 使用{}创建,并使用add()方法添加元素

    a={3,5,7}
    
    a.add(9)
    
    print(a)
    
  2. 使用set(),将元组、列表等可迭代对象转成集合

  3. remove()删除指定元素,clear()清空整个集合

集合相关操作

a|b #并集
a.union(b)

a&b #交集
a.intersection(b)

a-b #差集
a.difference(b)

控制语句

数据可以看做是‘砖块’。控制语句是代码的组织方式,可以看做是‘混凝土’。

选择结构

选择结构:单分支、双分支、多分支。

单分支

if 条件表达式:

    语句

num=input('请输入一个数字:')

if int(num)>10:

    print(num)
条件表达式详解
  • False、空序列、空值、0、空迭代对象,其他均为True
  • 条件表达式不能出现=,==表示等于判断

双分支

if 条件表达式:
    语句1

else:
    语句2
三元条件运算符

简单双分支赋值情况
条件为真时的值 if (条件表达式) else 条件为假时的值

print('s<10' if 5<10 else 's>=10')

多分支选择结构

if 表达式1:
    语句1

elif 表达式2:
    语句2
……
else:
    语句n

选择结构嵌套

使用时注意控制好不同级别的缩进量,缩进量决定了代码的从属关系。

循环结构

如果符合条件,反复执行循环体的语句。

while循环

while 条件表达式:
    循环体语句 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值