字典
字典是“键值对”,元素即是“键值对”,包含:“键对象”与“值对象”。
“键”是任意的不可变的数据,比如:整数、浮点数、字符串、元组
列表、字典、集合这些可变对象,不能作为“键”
字典的创建
1、可以通过{}、dict{}来创建字典对象
>>> a = {‘name’:’zz’}
>>> b = dic(name = ‘zz’)
2、通过zip()创建字典对象
>>> k = [‘name’,’age’,’job’](键)
>>> v = [‘zz’,’11’,’vvv’](值)
>>> d = dic(zip(k,v))
>>> d
{‘name’:’gaoqi’,’age’:’18’,’job’:’techer’}
3、通过fromkeys创建值为空的字典
>>> a = dict.fromkeys([‘name’,’age’,’job’])
>>> a
{‘name’:None,’age’:None,’job’:None}
字典元素访问
为了测试各种访问方法,设定了一个字典对象:
1、通过[键]获得“值”。若键不存在,则返回异常
>>> a = {‘name’:’zz’,’age’:’18’,’job’:’programmer’}
>>> a[‘name’]
>>> a[‘age’]
>>> a[‘sex’]没有的报错
2、通过get()方法活得“值”。推荐使用。优点是:即使指定键不存在,也返回None
列出所有的项目:a.item() 列出所有的键:a.keys() 列出所有的值:a.values()
len() 键值对的个数
检测一个“键”是否在字典中
>>> a = {“name”:”gaoqi”,”age”:18}
>>> “name” in a
True
字典元素添加、修改、删除
添加
a=[“address”] = “西三角”,键如果重复,直接覆盖
使用update()将新字典中所有键值覆盖原键值
3、字典中元素的删除,可以使用del()方法:或者clear()删除所有键值对;pop()删除指定键值对,并返回相应的“值对象”
popitem():随机删除和返回该键值对。
序列解包
可用于元组、列表、字典、序列解包
>>> x,y,z =(20,30,10)
>>> x 20
>>>(a,b,c)=(9,8,10)
>>>a
9
>>>[a,b,c] = [10,20,30]
>>> a
10
表格数据使用字典和列表存储,并实现访问
a1 = {“name” : ”高小一”,“age” : 18, “salary” : 30000, “city” : “北京”}
a2 = {“name” : ”高小二”,“age” : 18, “salary” : 20000, “city” : “上海”}
a3 = {“name” : ”高小五”,“age” : 20, “salary” : 10000, “city” : “深圳”}
tb = [a1,a2,a3]
#获得第二行的人的薪资
print (tb[1].get(“salary”))
#打印表中所有的薪资
a1 = {"name":"高小一","age":18,"salary":30000,"city":"北京"}
a2 = {"name":"高小二","age":18,"salary":20000,"city":"上海"}
a3 = {"name":"高小五","age":20,"salary":10000,"city":"深圳"}
tab = [a1,a2,a3]
for i in range(len(tab)):
print(tab[i].get("salary"))
#打印全部表格
a1 = {"name":"高小一","age":18,"salary":30000,"city":"北京"}
a2 = {"name":"高小二","age":18,"salary":20000,"city":"上海"}
a3 = {"name":"高小五","age":20,"salary":10000,"city":"深圳"}
tab = [a1,a2,a3]
#打印表的所有数据
for i in range(len(tab)):
print(tab[i].get("name"),tab[i].get("age"),tab[i].get("salary"),tab[i].get("city"))
字典核心底层原理(重要)
字典对象的核心是散列表,散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket.每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。
根据键查找“键值对”的底层过程
>>> a.get(“name”)
‘zz’
>>> bin(hash(“name”))通过哈希算法
‘-0b1010111101001110110101100100101
’用法总结:
1、键必须可散列
- 数字、字符串、元组、都是可散列的。
- 自定义对象需要支持下面三点
支持hash()函数
支持通过_eq_()方法检测相等性
若 a==b为真,则hash(a)==hash(b)也为真
2、字典在内存中开销巨大,典型的空间换时间。
3、键查询速度很快
4、往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字典的同时进行字典的修改
集合
集合的定义:集合是无序可变,元素不能重复。集合底层是字典实现,集合的所有元素只有字典中的“键对象”,因此是不能重复的且唯一的
集合创建和删除
- 使用()创建集合对象,并使用add()方法添加元素
>>> a = {3,5,7}
>>> a
{3,5,7}
>>> a.add(9)
>>> a
{9,3,5,7}
- 使用set(),将列表、元组等可迭代对象转成集合。如果原来数据存在重复数据,则只保留一个。
>>> a = [‘a’,’b’,’c’,’b’]
>>> b = set(a)
>>> b
{‘b’,’a’,’c’}
3 、remove()删除指定元素;clear()清空整个集合
>>> a = {10,20,30,40,50}
>>> a.remove(20)
{10,50,30}
集合相关操作
选择结构
a = input("请输入一个数字:")
if int(a)<10:
print(a)
条件表达式:
在选择和循环结构中,条件表达式的值为False的情况如下:
False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空range对象、空迭代对象。
其他情况,均为True。
条件表达式中,不能有赋值操作符 “=”
在Python中,条件表达式不能出现赋值操作符”=”,避免了其他语言中经常误将关系运算符“==”写作赋值运算符“=”带来困扰。
If / else
多项并列时,可以用if、elif、elif、elif、elif、、、、(或用else收尾)
多分支结构,需具有逻辑关系,不能随意颠倒顺序。
score = int(input("请输入分数"))
grade = ""
if score<60:
grade = "不及格"
elif score<80:
grade = "及格"
elif score<90:
grade = "良好"
else:
grade = "优秀"
print("分数是{0},等级是{1}".format(score,grade))
选择结构嵌套
选择结构可以嵌套,使用时
一个有意思的小玩意
score = int(input("请输入一个分数"))
degree = "ABCDE"
num = 0
if score>100 or score<0:
print("请输入一个0-100的分数")
else:
num = score//10
if num <6:
num = 5
print(degree[9-num])
循环结构:
while循环:
1 、(1-10)循环
num = 0
while num<10:
print(num)
num += 1
2、(1-100加法)
num = 1
sum_all= 0
while num <=100:
sum_all=sum_all + num
num +=1
print(sum_all)