python-字典

时间:2022-01-13 00:53:02

字典

特点

  • 符号:{}
  • 关键字: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']}