字典
键值对的无序可变序列,每个元素包含“键对象”和“值对象”。键是任意不可变对象(列表),不可重复,值是任意数据,可重复,可以是列表等。
字典的创建
1.通过{}、dict()创建字典对象
a={‘name’:‘杨’,‘age’:19}
b = dict(name=‘杨’,age=20,job=‘student’)
a=dict([(“name”,“杨”),(“age”,19)])
2.通过zip()创建字典对象
>>> a=['name','age','job']
>>> b=['Tom',23,'teacher']
>>> d=dict(zip(a,b))
>>> d
{'name': 'Tom', 'age': 23, 'job': 'teacher'}
3.通过fromekys创建值为空的字典
>>> a = dict.fromkeys(['name','age','job'])
>>> a
{'name': None, 'age': None, 'job': None}
字典元素的访问
1.通过键
2.通过get()方法,推荐使用,若键不存在,默认返回None
>>> a={'name':'杨','age':19}
>>> a['name']
'杨'
>>> a['job']
Traceback (most recent call last):
File "<pyshell#132>", line 1, in <module>
a['job']
KeyError: 'job'
>>> a.get('age')
19
>>> a.get('sex','男')
'男'
3.列出所有键值对
>>> a.items()
dict_items([('name', '杨'), ('age', 19)])
>>> a.keys()
dict_keys(['name', 'age'])
>>> a.values()
dict_values(['杨', 19])
>>> len(a) #有多少键值对
2
>>> 'name' in a #某个键是否在字典中
True
>>> 'job' in a
False
字典元素的添加、修改、删除
- a[‘address’]=‘北京’ 若键存在则覆盖
2.update()将新字典所有键值对全部加到旧字典上,如有key重复,则覆盖
a={。。。}
b={。。。}
a.uodate(b)
3.字典中元素的删除
del(a[‘name’])
b=a.pop(‘age’) #删除age,返回age
clear()#删除所有键值对
4.popitem():随机删除和返回键值对。字典是无序可变序列,没有第一个、最后一个元素的费奶奶;popitem弹出随机地项,因为字典中没有“最后的元素”或者有关顺序的概念,若想一个接一个地移除并处理项,该方法就非常有效,因为不用首先获取键值的列表。
序列解包
序列解包可用于元祖、列表、字典。序列解包让我们更方便地对多个变量赋值
x,y,z = (20,30,10)
(x,y,z)=(1,2,3)
…
序列解包用于字典:
>>> a={'name':'杨','age':19}
>>>> x,y = a
>>> x
'name'
>>> y
'age'
>>> u,v=a.values()
>>> u
'杨'
>>> v
19
表格数据使用字典和列表存储,并实现访问
r1 = {'name':'李四','age':19,'address':'北京'}
r2 = {'name':'王五','age':25,'address':'重庆'}
r3 = {'name':'张三','age':22,'address':'成都'}
tb = [r1,r2,r3]
#获得第二行的人的年龄
#print(tb[1].get('age'))
#打印表中所有地址
#for i in range(3):
# print(tb[i].get('address'))
#打印所有元素
for i in range(3):
print(tb[i].get('name'),tb[i].get('age'),tb[i].get('address'))
字典核心底层原理(重要)
字典的核心是散列
根据键查找“键值对”的底层过程
根据key查找到“键值对”,从而找到value
用法总结:
- 键必须可散列(数字、字符串、元祖)
- 字典在内存中开销巨大,典型的空间换时间
- 键值查询速度很快
- 往字典里面添加新建可能导致扩容,导致散列表中键的次序发生变化。因此不要在遍历字典的同时进行字典的修改。
集合
无序、可变、元素不重复。底层实现是就是字典,集合的所有元素都是字典中的key对象,因此不重复,唯一。
集合的创建和删除
- 使用{}创建集合对象,并使用add()添加元素。a={1,2} a.add(3)
- 使用set()将元祖、列表等可迭代的对象转成集合。a=[‘a’,‘b’,‘a’] b=set(a)
- remove()删除指定元素,clear()清空整个集合。
集合的相关操作
交:& 或intersection()
并:| 或union()
差:- 或 difference()
控制语句
三元条件运算符
条件为真时的值 if (条件表达式)else 条件为假的值
s = input(“请输入一个数字”)
print(“a是小于10的数字” if int(s)<10 else “s是大于10的数字”)
多分支结构
if
elif
.
.
.
else