专栏:python
个人主页:HaiFan.
专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。
字典
- 思维导图
- 字典是什么
- 创建字典
- 查找键key
- 字典的新增和修改元素
- 删除元素
- 遍历字典元素
- 合法的key类型
- 总结
思维导图
字典是什么
字典是一种存储键值对
的结构。
什么是键值对呢?这是计算机中一个广泛使用的概念。
把键key和值value
进行一个一一对应的映射,然后就可以根据键快速找到值。
比如:学校的学生,每个学生都有一个唯一的学号,知道了学号,就可以通过学号找到这个同学,这里的学号就是键,同学就是值。
创建字典
创建一个字典有两种方式,一个是使用{}
创建,还有一种是通过dict关键字
来创建。
a = {}
print(type(a))
b = dict()
print(type(b))
也可以在创建的同时进行初始化。
键值对之间的使用,分割键和值之间使用:
分割
使用print
来输出字典的内容
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(stu)
注:在创建字典并进行初始化的时候,如果有多个键值对,可以将其分开写,这样显得更加美观。
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
最后一个键值对,后面可以写,
也可以不写。
查找键key
在列表中,使用in
可以判断某一元素是否在该列表中存在。
在这里,使用in
也可以判定key
是否在字典中存在,返回值是布尔值。
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print('name' in stu)
print('haha' in stu)
print(100 in stu)
注:in只是判定
key
是否存在,与value
无关。
使用[]
通过类似于取下标的方式,获取到元素的值,只不过,此处的下标是key
,(key的数据类型可能是任意类型),通过访问key
可以找到value
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(stu['name'])
如果key
在字典中不存在,则会抛出异常
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(stu[100])
对于字典来说使用in或者[]来获取value都是高效的操作。
在列表中,使用in是低效的,使用[]是高效的。
字典背后使用的是特殊的数据结构:哈希表
字典的新增和修改元素
使用[]
可以根据key来新增/修改value。
如果key不存在,对取下标操作赋值,即为新增键值对。
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(f'没有新增前{stu}')
stu['age'] = 10
print(f'新增后{stu}')
如果key已经存在,对取下标操作赋值,是修改键值对的值。
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(f'修改前{stu}')
stu['gread'] = 200
print(f'修改后{stu}')
删除元素
列表可以使用pop()进行尾删,在pop()这个括号里面添加数字,是按照下标删除元素。
在字典中,使用pop方法,根据key来删除键值对。
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(f'删除前{stu}')
stu.pop('gread')
print(f'删除后{stu}')
注:不能直接使用pop进行尾删,否则后抛出异常
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
stu.pop()#括号里要带上key
遍历字典元素
遍历是把一个可迭代对象里面的元素依次取出来。
列表可以遍历,字典也可以遍历。
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
for key in stu:
print(key,stu[key])
取出所有key和value
使用keys
方法可以获取到字典中的所有的key
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(stu.keys())
注:这里的dict_keys是一个特殊的类型,专门用来表示字典中所有的key,大部分元组支持的操作对于dict_keys同样适用。
使用values
方法可以获取到字典中的所有value
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(stu.values())
注:这里的dict_values也是一个特殊的类型,和dict_keys类似
使用items
方法可以获取到字典中的所有键值对
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
print(stu.items())
stu = {'name' : 'zhangsan',
'stu id': 123456,
'gread': 100
}
for k,v in stu.items():
print(k,v)
合法的key类型
不是所有的类型都可以作为字典的key
字典的本质是一个哈希表(哈希表是数据结构里的内存,想了解的话,可以了解一下,哈希表也叫做散列表,根据关键字和值直接进行访问的数据结构,通过把关键字key映射到表中的一个位置)
哈希表的key
要求是可哈希的
,也就是可以计算出一个哈希值。
可以使用hash函数计算出某个对象的哈希值
print(hash(1))
print(hash(0))
print(hash(0.001))
print(hash("新年快乐"))
列表无法计算哈希值
alist = [1,2,3]
print(hash(alist))
unhashable就是不可哈希的意思
字典也无法计算哈希值
adict = {1:2}
print(hash(adict))
不可变的对象一般是可哈希的
可变的对象一般书不可哈希的
总结
字典也是一个常用的结构,字典的操作都是以key为中心展开的,需要用到键值对映射
的场景,就可以考虑使用字典。