Python基础(第四节)

字典

1、字典是键值对的无序可变序列,字典中每个元素都是一个键值对,包含键对象和值对象
2、可以通过键对象实现快速获取、删除、更新对应的值对象
3、键是任意的不可变数据,如;整数、浮点数、字符串、元组;但是列表、字典、集合这些可变对象不能作为键,且键不可重复

字典的创建
1、通过{}/dict()来创建字典对象

>>> a = {'name':'wyj','age':22,'job':'student'}
>>> b = dict(name='wyj',age=22,job='student')
>>> c = dict([('name','wyj'),('age',22)])
>>> d = {}        

2、通过zip()创建字典对象

>>> k = ['name','age','job']
>>> v = ['wyj',22,'student']
>>> e = dict(zip(k,v))
>>> e
{'name': 'wyj', 'age': 22, 'job': 'student'}      

3、通过fromkeys创建值为空的字典

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

字典元素的访问
1、通过键获得值,若键不存在,则抛出异常

>>> b = dict(name='wyj',age=22,job='student')
>>> b['name']
'wyj'

2、通过get()获得值,推荐使用。
优点是:若键不存在。返回none;也可以设定指定键不存在时默认返回的对象

>>> b = dict(name='wyj',age=22,job='student')
>>> b.get('name')
'wyj'
>>> print(b.get('sex'))
None
>>> b.get('sex','男性')
'男性'

3、找出所有的键值对

>>> b = dict(name='wyj',age=22,job='student')
>>> b.items()
dict_items([('name', 'wyj'), ('age', 22), ('job', 'student')])

4、找出所有键,找出所有值

>>> b = dict(name='wyj',age=22,job='student')
>>> b.keys()
dict_keys(['name', 'age', 'job'])
>>> b.values()
dict_values(['wyj', 22, 'student'])

5、lin()函数
返回键值对个数

6、检测一个键是否在字典中

>>> b = dict(name='wyj',age=22,job='student')
>>> 'name' in b
True

字典元素的添加、修改、删除
1、直接修改

>>> b = dict(name='wyj',age=22,job='student')
>>> b['address'] = '黑龙江'
>>> b['age'] = 23
>>> b
{'name': 'wyj', 'age': 23, 'job': 'student', 'address': '黑龙江'}

2、使用update()将新字典中所有键值对全部添加到旧字典对象上;如果key有重复,则直接覆盖

>>> b = dict(name='wyj',age=22,job='student')
>>> c = {'name':'jj','age':23,'sex':'male'}
>>> b.update(c)
>>> b
{'name': 'jj', 'age': 23, 'job': 'student', 'address': '黑龙江', 'sex': 'male'}

3、字典元素的删除可以使用del() 或者使用clear()删除所有键值对;
pop()可以删除指定键值对,并返回对应的值对象

>>> b
{'name': 'jj', 'age': 23, 'job': 'student', 'address': '黑龙江', 'sex': 'male'}
>>> del(b['name'])
>>> b
{'age': 23, 'job': 'student', 'address': '黑龙江', 'sex': 'male'}
>>> c = b.pop('age')
>>> c
23

4、popitem():随机删除和返回该键值对
字典是无序可变序列,因此没有第一个、最后一个元素的概念;因此,若想一个接一个移除并处理项,这个方法非常有用

>>> b
{ 'job': 'student', 'address': '黑龙江', 'sex': 'male'}
>>> b.popitem()
('sex', 'male')
>>> b
{'job': 'student', 'address': '黑龙江'}

序列解包
1、可用于元组、列表、字典,方便对多个变量赋值

>>> x,y,z = 1,2,3
>>> (x,y,z) = (1,2,3)
>>> [x,y,z] = [1,2,3]

2、对字典的解包
①返回字典的键

>>> b = dict(name='wyj',age=22,job='student')
>>> x,y,z = b
>>> x
'name'
>>> y
'age'
>>> z
'job'

②返回字典的值

>>> x,y,z = b.values()
>>> x
'wyj'
>>> y
22
>>> z
'student'

③返回键值对

>>> x,y,z, = b.items()
>>> x
('name', 'wyj')
>>> y
('age', 22)
>>> z
('job', 'student')

复杂表格数据存储

>>> r1 = {'name':'王晓一','薪资':2000,'地点':'北京'}
>>> r2 = {'name':'王晓二','薪资':3000,'地点':'上海'}
>>> r3 = {'name':'王晓三','薪资':4000,'地点':'深圳'}
>>> tb =[r1,r2,r3]
>>> #打印表中所有薪资
... for i in range(len(tb)):
...     print(tb[i].get('薪资'))
...
2000
3000
4000
>>> #打印表中所有数据
... for i in range(len(tb)):
...     print(tb[i].get('name'),tb[i].get('薪资'),tb[i].get('地点'))
...
王晓一 2000 北京
王晓二 3000 上海
王晓三 4000 深圳

字典的核心底层原理
1、字典对象的核心是散列表
2、散列表是一个稀疏数组(总是有空白元素的数组),该数组的每个单元叫bucket,每个bucket有链各个部分:一个是键对象的引用,一个是值对象的引用
3、所有bucket结构和大小一致,可以通过偏移量来读取指定的bucket

存储和读取原理略

集合

1、无序可变,元素不能重复
2、集合底层是字典实现,集合的所有元素都是字典的键对象,因此唯一不能重复

集合的创建和删除
1、使用{}创建,并用add()添加元素

>>> a = {1,2,3}
>>> a
{1, 2, 3}
>>> a.add(4)
>>> a
{1, 2, 3, 4}

2、使用set(),可以将列表、元组等可迭代对象转成集合;如果原来存在重复数据,则只保留一个

>>> a = [1,2,3,1,2]
>>> b = set(a)
>>> b
{1, 2, 3}

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

>>> b.remove(1)
>>> b
{2, 3}

集合的相关操作
Python提供并集、交集、差集等运算

>>> a = {1,2,3}    
>>> b = {2,3,4}
>>> a|b    #并集
{1, 2, 3, 4}
>>> a&b    #交集
{2, 3}
>>> a-b    #差集
{1}
>>> a.union(b)    #并集
{1, 2, 3, 4}
>>> a.intersection(b)    #交集
{2, 3}
>>> a.difference(b)    #差集
{1}

选择结构

选择结构通过判断条件是否成立,来决定执行哪个分支。

单分支选择结构
语法形式:

if 条件表达句:
    语句/语句块(缩进必须对齐一致)
num = input('输入一个数字:')
#input()输出的是字符串,需要转整数
#if后有没有空格都可以,要加冒号
if int(num) < 10:
    print(num)
    

在选择和循环结构中,条件表达式的值为False的情况如下:
False、0、0.0、空值None、空序列对象(空列表、空元组、空集合、空字典、空字符串)、空range对象、空迭代对象
其余情况都为True

PS:条件表达式不能出现赋值符!

双分支选择结构
语法结构:

if 条件表达式:
    语块1
else:
    语块2

三元条件运算符
语法格式:

条件为真时的值 if 条件表达句 else 条件为假时的值
num = input("请输入一个数字")
print(num if int(num)<10 else "数字太大")

多分支选择结构
语法结构

if 条件表达式1:
    语句1
elif 条件表达式2:
    语句2
.
.
.
elif 条件表达式n
    语句n
[else:
    语句n+1]
    
score = int(input("请输入成绩:"))
grade = ""

if score<60:
    grade = "不及格"
elif score<80:
    grade = "及格"
elif score<90:
    grade = "良好"
else:    #不要忘记冒号
    grade = "优秀"

print(grade)

选择结构的嵌套

score = int(input("请输入成绩:"))
degree = "ABCDE"
num = 0
if score<0 or score >100:
    print("请输入一个0-100的分数")
else:
    num = score//10
    if num<6:
        num = 5
    if num == 10:
        num = 9
    print("等级为:"+ degree[9-num])

while循环结构
1、重复执行一条或多条语句
2、循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否则就变成了死循环

num = 0
while num<=10:
    print(num,end = "\t")
    num += 1
发布了14 篇原创文章 · 获赞 0 · 访问量 389

猜你喜欢

转载自blog.csdn.net/Bro_Jun/article/details/104741745