一句废话都没有的Pycharm(六):字典
介绍:
- 1.字典
- 2.字典的创建
- 3.字典元素的获取
- 4.字典元素的增删改
- 5.获取字典的视图
- 6.字典元素的遍历
- 7.字典生成式
1.字典
字典以键值对的方式存储数据。
如:age={'Tom': 23,'Alice': 66,'Bob': 45}
里的对象是一对一对存储的,'Tom': 23
冒号之前的叫做“键”,冒号之后的叫做“值”,所以叫键值对。而,列表里的对象都是单独存在的。
字典是个无序序列,而列表是个有序序列。此处的有序无序可以理解为对象在内存里的存储地址位置,即在列表中,第一个放进列表的对象就存在第一个位置上,第二个放进列表的对象就存在第二个位置上,而字典不同,第一个放进字典的对象不一定存在第一个位置上,如下图:
hash(key3) | hash(key1) | hash(key4) | ||
---|---|---|---|---|
value 3 | value 1 | value 4 |
上表中k1代表第1个放入字典当中的键,它并没有存储在字典的第一个位置上。(ki代表第i个字典当中的键。)
要求:
key必须是不可变序列。(不可变序列不可以进行增删改操作。另:字符串,整数序都是不可变序列。列表、字典是可变序列。)
key不可以重复,value可以重复。要是重复的话会被覆盖掉,如:age={'Tom': 23,'Tom': 66,'Bob': 45}
输出为{'Tom': 66}
前一个被后一个覆盖掉了。
在字典里不可以指定位置插入元素,也就是说没有insert操作。
字典十分浪费空间,属于用空间换时间的结构。如上表中空出的位置就是被浪费的内存。
Python中,字典是通过key来查找value所在的位置的,key是通过hash函数计算出的。
2.字典的创建
- 常用:花括号。
age={'Tom': 23, 'Alice': 66}
- 内置函数dict()
dict(name='Bob', age=45)
代码展示:
#创建
#使用花括号创建
age={'Tom':23,'Alice':66}
print(type(age))
#使用内置函数dict()创建
special=dict(name='Bob',age=45)
print(special)#以花括号的形式输出
#创建空字典
null={}
print(null)
结果展示:
3.字典元素的获取
- []
- get()
代码展示:
#查找
#通过[]查找
print(age['Tom'])
#print(age['Bob'])#不存在,输出:KeyError: 'Bob'
#通过get()查找
print(age.get('Tom'))
print(age.get('Bob'))#不存在,输出None
print(age.get('Bob',1))#设置在key不存在时,输出1
结果:
4.字典元素的增删改
代码展示
#判断
print('Tom' in age)
print('Alice' not in age)
#增
age['Peter']=10
print(age)
#改
age['Peter']=11#将Peter的年龄改为11
print(age)
#删
del age['Tom']
print(age)
#清空字典元素
age.clear()
print(age)
结果展示:
5.获取字典的视图
代码展示:
#获取视图操作
#获取字典中的所有key:keys()
age={'Tom':23,'Alice':66}
keys=age.keys()
print(keys)
print(list(keys))
#获取字典中的所有value:values()
values=age.values()
print(values)
print(list(values))
#获取字典中的所有key和value:items()
items=age.items()
print(items)
print(list(items))#输出结果中(),这是元组
结果展示:
6.字典元素的遍历
语法:
for item in age:
print(item)
item是键。
代码展示
#遍历
age={'Tom':23,'Alice':66}
for item in age:
#print(item)#输出的是键
print(item,age.get(item),age[item])#输出的是键和值
结果:
7.字典生成式
理解:我有一堆键,也有一堆值,想要将它们输出成字典的形式,也就是一对一对的形式。
这就需要用到函数zip()
语法:
name:age for name,age in zip(names,ages)
代码展示:
#字典生成式
names=['Tom','Amy','Jerry','Lily']
ages=[22,32,43,21]
a={name:age for name,age in zip(names,ages)}
print(a)
b={name.upper():age for name,age in zip(names,ages)}#name.upper()可以让name变大写
print(b)
结果展示: