学习笔记第四天——字典

字典的创建:

1、dic={'姓名':'高崎','年龄':19}

2、dic=dict()

dic=dict('姓名'='高崎','年龄'=19)

dic=dict([('姓名','高崎'),('年龄',19)])

3、通过zip创建字典对象

k=['姓名','年龄']

v=['高崎',19]

dict(zip(k,v))

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

dic=dict.fromkeys(['姓名','年龄'])

print(dic)

字典元素的访问:

dic['姓名']:字典通过键对值进行访问

dic.get('姓名'):通过get方法获得值,好处是指定键不存在则返回None,也可以设定键不存在时返回默认对象

dic.get('城市','不存在'):当访问的键不存在时返回逗号后的“不存在”

dic.items():访问字典中的键值对

dic.keys():访问字典中的键

dic.values():访问字典中的值

检测一个键是否在字典中

'name' in dic:返回布尔值True or False

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

a['城市']='深圳'#如果字典a中有键城市则对键城市的值进行修改,改为深圳,如果a中没有城市则添加城市为新的键

a.update(b):a和b均为字典,该方法表示对字典a进行更新,b和a重复的键则采用b的值,b和a不重复的键则将b的键新增到a中

del(a['姓名'])#删除字典a中键姓名对应的键值对全部删除

b=a.pop('姓名')#删除字典中键姓名对应的键值对,并返回姓名对应的值

b=a.popitem()#随机删除字典a中的某1个键值对并返回该键值对,括号中不可填入任何参数

序列解包

x,y,z=(20,30,50),x,y,z=[20,30,50]
对x,y,z进行赋值,可不加括号

序列解包用于字典时默认对键进行操作,对键值对操作用items(),对值操作用values()

s = {'name':'gaoqi','age':18,'job':'teacher'}

name,age,job=s#将name、age、job分别与字典a的键顺序进行一一对应,将键的值赋值给变量name,age,job。

name,age,job=s.items() #将字典s的键值对顺序赋值给三个变量

name,age,job=s.values() #将字典s的值顺序赋值给三个变量

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

r1={'name':'高小一','age':18,'salary':30000,'city':'北京'}
r2={'name':'高小二','age':19,'salary':20000,'city':'上海'}
r3={'name':'高小五','age':20,'salary':10000,'city':'深圳'}
dic=[r1,r2,r3]
dic[0].get('name')#通过将字典存储为列表的每一行,再对列表进行访问,访问到其中的某一个字典再用get方法获取该字典键对应的值
#打印该列表中所有的元素
for m in range(len(dic)):
for n in dic[m]:
print(dic[m][n],end='\t')#后面加end是希望每一行的数据不换行
print()#这个print在这里的作用是换行

#打印表格中所有的薪资
for m in range(len(dic)):
print(dic[m]['salary'])

字典核心底层原理:

创建字典的核心,将键值对放入字典对象中,首先要计算键的散列值(bin(hase(‘name’)))(计算name的hash值将其转换为二进制(bin))即得出其散列值,将散列值的最后三位数值作为索引值去对应二进制的数,如果对应数对应的字典行为空则放入该行,如果不为空则向前取三个值计算对应行数,再看是否为空,为空则放入对应行,值与键逻辑相同

 

 

用法总结:
1. 键必须可散列
(1) 数字、字符串、元组,都是可散列的。
(2) 自定义对象需要支持下面三点:

①支持hash()函数
②支持通过__eq__()方法检测相等性。
③若a==b 为真,则hash(a)==hash(b)也为真。
2. 字典在内存中开销巨大,典型的空间换时间。
3. 键查询速度很快
4. 往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字
典的同时进行字典的修改。

集合

集合是无序可变的,元素不能重复,集合中所有的元素都是字典中的‘键对象’

集合的创建:1、a={2,5,7}

2、a=(2,5,7)   a=[2,5,7]→b=set(a)  #使用set方法创建集合时,括号中的对象必须为元组、列表、字符串等可迭代对象,不能直接填入集合的元素

a.add(8) :用add方法向集合a中添加元素,如原集合中存在则保留一个

a.remove(8):用remove方法删除集合a中的某个元素

a.clear():用clear方法清空集合a中的元素

集合的相关操作:并集、交集、差集

并集:a|b 或 a.union(b) #合并两个集合

交集:a&b 或 a.intersection(b)#输出a中和b相同的元素集合

差集:a-b 或 a.difference(b)#从a中减去b的元素

#对a进行变化,加入或减少b中的内容

选择结构(if语句)

p=int(input('请输入一个0-100之间的数字:'))
grade=''
while p>100 or p<0:
        p=int(input('输入错误!请重新输入一个0-100之间的数字:'))
        continue
if p>=90:
        grade='A'
elif p>=80:
        grade = 'B'
elif p>=70:
        grade = 'C'
elif p>=60:
        grade = 'D'
else:
        grade = 'E'
print('成绩为{0},等级为{1}'.format(p, grade))

优化后代码:

p=int(input('请输入一个0-100之间的数字:'))
grade='ABCDE'
while p>100 or p<0:
        p=int(input('输入错误!请重新输入一个0-100之间的数字:'))
        continue
m=p//10
if p==100:
        print('成绩为100,等级为A')
elif p<60:
        print(f'成绩为{p},等级为E')
else:
        print('成绩为{0},等级为{1}'.format(p,grade[9-m]))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值