Python学习记录——字典

Python学习记录——字典(dict)


前言

今天大计课之余,又自学了一波字典,终于搞明白了python中字典的一些基础语法和用法

一、字典是什么?

一种python提供的数据结构,用来存放具有映射关系的数据
其中一个key对应一个value,构成一一映射关系
其实也就类似于dict储存了两个列表,其中的元素构成一一对应关系
keys与values
因为一个key映射一个value,所以字典中的key一定是各不相同的。
字典在python中使用花括号{}来囊括不同于列表的方括号[]和元组的圆括号()

二、相关语法

1.创建字典

  • 花括号创建字典
dict0 = {'语文': 90, '数学': 100, '英语': 80}
print(dict0)
{'语文': 90, '数学': 100, '英语': 80}

dict1 = {}#创建空字典
print(dict1)
{}

dict2 = {(1,2):'one and two',3:'three'}#元组也可以作为key
#但是列表不可以是字典的key,因为key必须是一个不可变类型
print(dict2)
{(1,2):'one and two',3:'three'}
  • 通过dict()创建字典
sorce=[('语文',90),('数学',100)]
dict0=dict(sorce)
sorce1=[['语文',90],['数学',100]]
dict1=dict(sorce1)
sorce2=(('语文',90),('数学',100))
dict2=dict(sorce3)
#dict()的传入可以是列表或者元组
print(dict0)
{'语文': 90, '数学': 100}
print(dict1)
{'语文': 90, '数学': 100}
print(dict2)
{'语文': 90, '数学': 100}
#dict()输出的列表的子列表会被分成两部分,分别成为字典的key和value
#所以说子列表里面最多只能存在2个元素

#特别当内层为元组时,会出现有趣的事情
subjects[('语文'),('数学')]
dict_sub=dict(subjests)
print(dict_sub)
{'语': '文', '数': '学'}
#被分成两部分
dict3=dict()#创建空字典

#dict()创建字典时,参数也可以不是列表,但是用等号创建,且不需要加引号
dict4 = dict(语文=90,数学=100)
print(dict4)
{'语文': 90, '数学': 100}

我们经常会出现需要把两个列表元素绑定的情况,那么我们就可以把两个列表用zip()压缩在一起再传入字典
例如

subject=['语文','数学']
sorce=[90,100]
dict5=dict(zip(subject,sorce))
print(dict5)
{'语文': 90, '数学': 100}
  • 以列表为键值创建字典
    通过dict.fromkey()传入一个列表,以列表的元素为key值创建字典
s=['a','b','c']
c=dict.fromkeys(s)#s作为键值列表
print(c)
{'a': None, 'b': None, 'c': None}

可以看到创建的列表的value全为None,那么怎么让创建的字典value有值呢
可以用到第二个参数

s=['a','b','c']
d=dict.fromkeys(s,10)
print(d)
{'a': 10, 'b': 10, 'c': 10}

可以第二个参数的传入不可以是一个列表,并且它会作为创建的列表的所有value

2.对字典进行访问

  • 通过key访问
dict6={'语文': 90, '数学': 100, '英语': 80}#首先先创建一个字典
print(dict6['语文'])#通过key进行访问
90

注意:字典不可以用列表中常用的位置索引0,1,2,3…来访问

  • 访问所有key,value
    可以使用dict_name.keys(),dict_name.values(),和dict_name.items()
    这三个函数分别返回名为dict_name的字典的key,value,key及value构成的元组的迭代器

例如

dict6={'语文': 90, '数学': 100, '英语': 80}
for i in dict6.keys():
    print(i)
语文
数学
英语

for i in dict6.values():
	print(i)
90
100
80

for i,j in dict6.items():
	print(i,j)
语文 90
数学 100
英语 80

t=list(dict6.keys())#也可以通过list()把其转换成一个列表
print(t)
['语文', '数学', '英语']

  • 通过dict_name.get(key, default=None)访问
    get()函数算是用方括号访问value值的加强版,可以有效解决访问无效的key而导致的报错问题
    当传入的key存在时,会返回这个key对应的value,当传入的key不存在时,则会返回default,default的默认值是None
dict6={'语文': 90, '数学': 100, '英语': 80}
print(dict6.get('语文'))
90

print(dict6.get('物理'))
None

print(dict6.get('物理',-1))
-1
  • 通过dict_name.setdefault(key, default=None)访问
    setdeault()函数当key值存在时与get()类似,但是当key不存在时会把这个key添加到字典中,且value为default
dict6={'语文': 90, '数学': 100, '英语': 80}
dict6.setdefault('物理',95)
print(dict6)
{'语文': 90, '数学': 100, '英语': 80, '物理': 95}

print(dict6.setdefault('语文'))
90

3.对字典进行修改

  • 添加元素
    添加有三种方法,一种就是上面提到的dict_name.setdefault,还可以用dict_name.update()和直接赋值
dict6={'语文': 90, '数学': 100, '英语': 80}
dict7={'物理':95}
dict6.update(dict7)#update()函数的传入值是一个字典
print(dict6)
{'语文': 90, '数学': 100, '英语': 80, '物理': 95}

dict7={'语文':70}
dict6.update(dict7)
print(dict6)
{'语文': 70, '数学': 100, '英语': 80, '物理': 95}
#如果value发生了改变,则以传入的字典的value为准

dict6={'语文': 90, '数学': 100, '英语': 80}
dict6['物理']=95
print(dict6)
{'语文': 90, '数学': 100, '英语': 80, '物理': 95}

直接赋值就比较简单粗暴了

  • 删除元素
    删除元素有del dict_name(key),dict_name.pop(key)和dict_name.popitem()三种方法
dict8={'语文': 90, '数学': 100, '英语': 80,'物理':95}
del dict8['语文']
print(dict8)
{'数学': 100, '英语': 80, '物理': 95}
m=dict8.pop('数学')#pop()函数会返回key对应的value
print(dict8,m)
{'英语': 80, '物理': 95} 100

i=dict8.popitem()#popitem()函数会返回删的key对应的(key,value)元组,默认删除最后一对key和value
print(dict8,i)
{'英语': 80} ('物理', 95)

  • 字典的清空与复制
    可以用dict_name.clear()来清空字典,用dict_name.copy来浅复制字典
dict8={'语文': 90, '数学': 100, '英语': 80,'物理':95}
dict8.clear()
print(dict8)
{}

dict8={'语文': 90, '数学': 100, '英语': 80,'物理':95}
dict9=dict8.copy()
print(dict9)
{'语文': 90, '数学': 100, '英语': 80, '物理': 95}
dict8.clear()
print(dict8)
{}
print(dict9)
{'语文': 90, '数学': 100, '英语': 80, '物理': 95}

三、用字典格式化字符串

一般我们都是按顺序给字符串进行格式化,但是有时候字符串中包含大量变量,按顺序格式化不太方便,这时候我们就可以用字典来格式化字符串

print('科目:%(科目)s 成绩:%(成绩)d'%{'科目':'语文','成绩':80})
科目:语文 成绩:80

总结

字典是python中一种非常有意思的数据结构,其中key与value一一映射的关系可以实现很多nb的功能。

以上就是我对学习字典过程的记录

如有错误,欢迎指正QAQ

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值