字典
特点
- 符号:{}
- 关键字:dict
- 保存的元素是:key:value 一对数进行操作
定义
定义空字典
- 方式一:dict1={}
- 方式二:dict2=dict() /列表和元组都都可以用这种方式:list1=list(),tuple1=tuple()
字典定义要求成对:key:value(键:值)
# 例:定义空列表
dict1 = {}
print(dict1) # 结果:--->{}
dict2 = dict()
print(dict2) # 结果:--->{}
# list1=list(),tuple1=tuple()是一样的
定义非字典
- 方式一:字典名={key1:value1,key2:value2,key3:value3}
- 方式二:字典名={[(key1,value1),(key2,value2),(key3,value3)]}
注意:key和value要对应,这样才能定义成功。key是唯一的,value是可变的。在定义的时候key不能对应多个value。
#错误示范
classmate={'name':'Tom','name':'Tony'}
print(classmate) # 结果:---->报错
上述代码是不行的,你的一个key不能有两个value值。好比一个人的身份证号码是唯一的,可以通过身份证号找到你叫张三,当然别人也可以叫张三,甚至叫李四。字典类比身份证,身份证号码类比key值,名字类比value值。
# 例:定义非空列表
zhangsan = {'age': 18, 'sex': '男'}
print(zhangsan) # 结果:--->{'age': 18, 'sex': '男'}
重点讲解方式二
用方式二定义字典需要使用列表,元组,在这个过程中先进行一个拆包和装包,他把列表、元组拆装重组成字典,因为列表中的元组有一对元素,所以才能将其对应的放入key和value中。 默认将元组中的前者放入key中,后者放入value中,单独使用列表不行,他会将列表中的元素都当作key值,单独使用元组也不行。只有列表中的元素成对存在时才能定义成功。
# 例:定义列表二
kuangtu = dict([('name', 'zhangsan'), ('age', '28'), ('sex', 'man')])
print(kuangtu) # 结果:--->{'name': 'zhangsan', 'age': '28', 'sex': 'man'}
#特殊示范--元组套列表
A = dict((['name', 'xiaohong'], ['age', 20], ['sex', 'man']))
print(A) # 结果:--->{'name': 'xiaohong', 'age': 20, 'sex': 'man'}
# 错误示范--只使用列表
xiaoming = dict(['age', '18', 'sex', 'man'])
print(xiaoming) # 结果:--->报错
# 错误示范--只是要元组
daming = dict(('age', '18', 'sex', 'man'))
print(daming) # 结果:--->报错
在创建字典时,对字典内元素的添加要求是成对添加,只使用列表和只使用元组会无法确定key值和value值。第二个特殊示范用元组套列表,只要对应号key,value还是能成功的,但我在pycharm中编写的时候显示意外类型,这代表这样的操作并不常用,但是合理。
字典的常见操作
增添元素
-
格式:字典名[key1]=value1
这样就将key1和value1配对起来存入字典中了
注意:当你在同样个字典中用同一个key存入一个新value时,会进行覆盖
# 例:字典的覆盖
dict1 = {}
dict1['name'] = 'Tom'
dict1['name'] = 'Tony'
print(dict1) # 结果:--->{'name': 'Tony'}
key值是唯一的,value值可以是不唯一的。
# 小练习-利用字典存储
print('----------字典存储----------')
database = [] # 这个列表用来存储字典,把他放在循环外以免被置空
while True:
name = input('姓名:') #两年半练习生、时间管理带师、加拿大电音王
age = input('年龄:') #18、38、28
sex = input('性别:') #男、男、男
user = {} # 每一次都会在这儿创建一个空字典
user['name'] = name
user['age'] = age
user['sex'] = sex
database.append(user)
Flag = input('是否继续?(w退出)')
if Flag == 'w':
break
print(database)
# 结果:--->[{'name': '两年半练习生', 'age': '18', 'sex': '男'}, {'name': '时间管理带师', 'age': '38', 'sex': '男'}, {'name': '加拿大电音王', 'age': '28', 'sex': '男'}]
查询元素
字典中找元素根据key来找,取元素也是。切记如果字典中找不到输入的key值,则会报错。可以去看字典中的函数 ---> get
- 格式:dict[key] ---> value
遍历字典查询
for循环遍历
-
for i in dict: ---> 把每一个key都依次赋给i
可用 in。单独遍历字典的结果是:字典的key
# 例:单个查询
a = {'name': 'kali', 'dream': 'fly', 'talent': 'computer'}
print(a['name']) # 结果:--->kali
# 借用上述字典循环遍历
for i in a: # in把字典a中的key依次拿出来给到i
print(a[i], end="/") # 结果:--->kali/fly/computer/
print(i, end="/") # 结果:--->dream/computer/talent/
字典中的函数
items
取出所有的key值和value值,将字典中key和对应的value转换成一个元组,并放入列表中
- 格式:dict.items()
# 例:字典中的函数-items
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
b = a.items()
c = dict.items(a)
print(b) # 结果:--->dict_items([('name', 'hacker'), ('love', 'kali'), ('talent', 'computer')])
print(c) # 结果:--->dict_items([('name', 'hacker'), ('love', 'kali'), ('talent', 'computer')])
# 两种格式都可以。print(a.items()),print(dict.items(a))也是一样的
用这个函数可对value进行查询操作
- 格式: for key,value in dict.items:
# 例:字典中的函数-items-对value进行查询
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
for key, value in a.items():
if value == 'kali':
print(key) # 结果:--->love
# 通过value值查找key值
# 遍历直接得到value值
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
for key, value in a.items():
print(value, end='/') # 结果:--->hacker/kali/computer/
函数items理解
此时的dict.items()是一个列表--[(),(),(),()],关键字in每次都将列表中的一个元组拿出赋给 key,value 元组--(key1,value1),元组中正好也是成对的元素,这就可以分别赋给两个。
values
只取出字典中所有value值。
- 格式:dict.values
# 例:字典中的函数-values
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
print(a.values()) # 结果:--->dict_values(['hacker', 'kali', 'computer'])
b = dict.values(a)
print(b) # 结果:--->dict_values(['hacker', 'kali', 'computer'])
keys
只取出字典中所有key。
- 格式:dict.keys
# 例:字典中的函数-keys
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
print(a.keys()) # 结果:--->dict_keys(['name', 'love', 'talent'])
b = dict.keys(a)
print(b) # 结果:--->dict_keys(['name', 'love', 'talent'])
in
不仅在列表,元组中可以用,字典也可以
- 格式:key in dict
get
用key去找value,比起直接用key去寻找,他不会报错,并且他可以设默认数据---0,'none','这里没有你要的东西'
- 格式:dict.get('key',设置默认数据)
# 例:字典中的函数-get
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
print(a.get('name')) # 结果:--->hacker
# 对比get函数和通过key值直接查询
print(a.get('大帅逼', '字典中没有发现改key')) # 结果:--->字典中没有发现改key
print(a['大帅逼']) # 结果:--->报错
删除元素
del删除
-
格式:del dict['key']
如果没有key值,则会报错
# 例:字典中的函数-get
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
del a['name']
print(a) # 结果:--->{'love': 'kali', 'talent': 'computer'}
del a['大帅逼']
print(a) # 结果:--->报错
# 因为没有没有key值,所以报错
del a
print(a) # 结果:--->报错
# 因为这时候a这个字典已经被删除了,没有字典a,所以打印会报错
字典中的内置删除函数
pop
就删除了指定的key
-
格式:dict.pop('key',默认数据)
-
result=dict.pop('key',默认数据)
如果key存在则能删除成功,且result会得到被删除的key的对应value值 如果key不存在则删除失败,result会得到这个默认数据
# 例:删除函数-pop
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
result = a.pop('大帅逼', '该字典中没有该key')
print(a) # 结果:--->{'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
print(result) # 结果:--->该字典中没有该key
result = a.pop('love', '该字典中没有该key')
print(a) # 结果:--->{'name': 'hacker', 'talent': 'computer'}
print(result) # 结果:--->kali
# 当使用pop函数不添加默认数据时,他也会报错
a.pop('大帅逼')
print(a) # 结果:--->报错
popitem
随机删除字典中的键值对,不用指定key值,一般是从末尾删除元素---->结合下面随机概念理解。
-
随机概念:字典是没有下标与编号的,所有可以理解为字典中的键值对是乱序的
-
格式:dict.popitem()
# 例:删除函数-popitem
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
a.popitem()
print(a) # 结果:--->{'name': 'hacker', 'love': 'kali'}
dict.popitem(a)
print(a) # 结果:--->{'name': 'hacker'}
a.popitem()
print(a) # 结果:--->{}
可以根据上述结果确定popitem函数每次都是删除最后一个元素。
clear
清空字典
- 格式:dict.clear()
# 例:删除函数-clear
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
a.clear()
print(a) # 结果:--->{}
其他内置函数
update
字典与字典的相加
-
格式:dict1.update(dict2)
字典中相同key的会进行value值的覆盖,没有的key会进行追加
# 例:其他内置函数-update
a = {'name': 'hacker', 'love': 'kali', 'talent': 'computer'}
b = {'name': 'kali', 'dream': 'fly', 'talent': 'computer'}
a.update(b) # 这里是a调用update函数,所以是在字典a中进行覆盖与追加
print(a) # 结果:--->{'name': 'kali', 'love': 'kali', 'talent': 'computer', 'dream': 'fly'}
print(b) # 结果:--->{'name': 'kali', 'dream': 'fly', 'talent': 'computer'}
fromkeys
将字符串、列表、元组转换成字典,前面这几个数据类型中的元素会被存储为key值,默认是将value值置为none,也可以自己设定默认值。
# 例:其他内置函数-fromkeys
a = [1, 2, 3, 'si', 'wu']
b = ('kali', 'hacker', 'computer', 4, 5)
c = dict.fromkeys(a)
print(c) # 结果:--->{1: None, 2: None, 3: None, 'si': None, 'wu': None}
d = dict.fromkeys(b, 666)
print(d) # 结果:--->{'kali': 666, 'hacker': 666, 'computer': 666, 4: 666, 5: 666}
e = dict.fromkeys(b, a)
print(e)
# 结果:--->{'kali': [1, 2, 3, 'si', 'wu'], 'hacker': [1, 2, 3, 'si', 'wu'], 'computer': [1, 2, 3, 'si', 'wu'], 4: [1, 2, 3, 'si', 'wu'], 5: [1, 2, 3, 'si', 'wu']}