8月3号小结
目录
字典
常用模块random
字典
在容器中存放数据以及对数据进行说明的一种容器。
在列表中保存学生的信息(由于没有相应的解释,在列表中查看数据不会很清楚对应的信息,一般不建议使用列表保存信息)
比如:[‘小明’, 20, 167, 90, 98, 80, 70]
你会发现有些数字你根本不知道其对应信息是啥,所以使用字典保存数据。
{‘name’: ‘小明’, ‘age’: 20, ‘height’: 167, ‘weight’: 90}
这样可以更加直观的看到数据以及所对应的信息。
一、性质
- 字典容器符号:
{}
;类型:dict
。- 字典是无序的。
- 字典是可变的(增删改)。
- 字典中元素是以键(key)值(value)对方式存在。比如:
key:value
key:对数据的索引以及对数据的解释说明(只能是不可变数据类型)。
value:实际要保存的数据(可以是任意数据类型)。- 对字典的操作默认是对键做操作。
二、字典没有拼接、重复、比较大小等操作
三、字典的遍历
dict1 = {
'name': '小明',
'age': 20,
'height': 167,
'weight': 90
}
for i in dict1:
print(i)
# 通过键获取值
print(dict1[i])
- 获取字典中所有键值对:
items
,得到的是可迭代对象(可以做遍历)。
print(dict1.items())
for key, value in dict1.items():
print(key, value)
# 获取字典中所有的键:keys
# 获取字典中所有的值:values
print(dict1.keys(), dict1.values())
四、字典的增删改
- 创建空字典
# dict函数(构造器)中的每一组参数就是字典中的一组键值对
person = dict(name='张三', age=55, weight=60, home='湖北武汉')
print(person) # {'name': '张三', 'age': 55, 'weight': 60, 'home': '湖北武汉'}
# 可以通过Python内置函数zip压缩两个序列并创建字典
items1 = dict(zip('ABCDE', '12345'))
print(items1) # {'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5'}
items2 = dict(zip('ABCDE', range(1, 10)))
print(items2) # {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
# 用字典生成式语法创建字典
items3 = {x: x ** 3 for x in range(1, 6)}
print(items3) # {1: 1, 2: 8, 3: 27, 4: 64, 5: 125}
dict1 = {}
print(dict1, type(dict1))
dict2 = dict()
print(dict2, type(dict2))
增
a.字典[键] = 值
dict1 = {}
dict1['name'] = '小王'
print(dict1)
b.setdefault:向字典中添加元素
- 如果字典中已经存在了这个键,字典不发生变化。
- 如果字典中不存在这个键,等于键和值添加到字典中。
- 如果setdefault只传入了键,默认将之设置为None
dict1.setdefault('age', 30)
dict1.setdefault('age', 20)
# dict1.setdefault({'age': 40, 'address':'China'})
dict1.setdefault('address')
print(dict1)
print('*' * 20)
# 可以这样做,用setdefault来传入多个键值对
dict2 = {
1: {'name': '小明'}
}
result = dict2.setdefault(2, {'name': '小李'})
print(result)
print(dict2)
print('*' * 20)
c.update
- 将一个字典更新到原字典中,如果键不存在,添加操作;反之,修改操作。
dict1.update({'score': 90, 'address': 'China'})
print(dict1)
修改
a.字典[键] = 值 (键存在就变成修改)
dict1['name'] = '小李'
print(dict1)
b.update
- 将一个字典更新到原字典中,如果键不存在,添加操作;反之,修改操作。
dict1.update({'score': 90, 'address': 'China'})
print(dict1)
删除
- del 字典[键]
del dict1['age']
- 字典.pop(键)
dict1.pop('address')
print(dict1)
- clear:清空
dict1.clear()
print(dict1)
五、字典的相关补充
sum、max、min、sorted等一系列方法默认为针对字典的键做操作。
dict1 = {'b': 1, 'a': 10, 'c': 20}
print(sorted(dict1))
字典推导式
students = {
'小明': 90, '小王': 60, '小张': 80
}
# 将字典中成绩大于等于80分的学生及其成绩填入到新的字典中
student1s = {key: students[key] for key in students if students[key] >= 80}
print(student1s)
student2s = {key: value for key, value in students.items() if value >= 80}
print(student2s)
查找
- 通过键查找值(如果字典中键不存在,会报错)
students = {
'小明': 90, '小王': 60, '小张': 80
}
print(students['小明'])
# print(students['张三']) # KeyError: '张三'
- 使用get方法通过键获取对应的值,如果取不到不会引发KeyError异常而是返回None或设定的默认值。
# 字典中的值又是一个字典(嵌套的字典)
students = {
1001: {'name': '狄仁杰', 'sex': True, 'age': 22, 'place': '山西大同'},
1002: {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'},
1003: {'name': '武则天', 'sex': False, 'age': 20, 'place': '四川广元'}
}
print(students.get(1002)) # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'}
print(students.get(1005)) # None
print(students.get(1005, {'name': '无名氏'})) # {'name': '无名氏'}
常用的模块random
首先我们要先导入random模块
import random
- randrange():从range()产生的容器中随机选择一个元素。
import random
print(random.randrange(1, 11, 2))
- random():从[0, 1)范围中随机产生一个浮点数
print(random.random())
- randint():从[a,b]中随机选取一个整数
print(random.randint(1, 100))
- choice():从容器中随机选取一个元素
names = ['张三', '李四', '王五']
print(random.choice(names))
- choices():从容器中随机选取k个元素(放回的取元素)。
print(random.choices(names, k=5))
- sample():从容器中随机选取k个元素(不放回的取元素)。
print(random.sample(names, k=3))
- shuffle():打乱有序、可变容器(列表)中元素的顺序。
random.shuffle(names)
print(names)
案例:设置一个随机提问的程序,要求每次提问前可以设置一次性抽取的学生个数,允许一个学生多次被提问。(这里我使用函数来封装,但是其实这种简单的要求,不需要用函数来封装)
students = ['张三', '李四', '王五', '赵六', '孙七']
# random.choices()
def choice_student(k):
x = random.choices(students, k=k)
return x
print(choice_student(5))
使用wxpython
、PyQt
等能够将程序做乘可视化的软件。
使用pyinstall
将程序封装为一个exe
可执行文件。