快速找到多个字典的公共键
from random import randint, sample
from functools import reduce
s1={x: randint(1, 4) for x in sample('abcdxyz', randint(3, 6)) } # sample()'abcdxyz'抽样随机生成3~6个字符
s2={x: randint(1, 4) for x in sample('abcdxyz', randint(3, 6)) }
s3={x: randint(1, 4) for x in sample('abcdxyz', randint(3, 6)) }
print(s1.keys()&s2.keys()&s3.keys()) #求交集 方法一
print(reduce(lambda a, b: a&b, map(dict.keys, [s1, s2, s3]))) 方法二 利用函数
map(func, iterable):一元操作函数func(),第一个参数接收一个函数名,第二个参数接收一个可迭代对象。
lt = [4, 2, 7, 4, 5, 8]
def add(num):
return num + 1
rs = map(add, lt)
print rs #[5,3,8,5,7,9]
reduct():内建函数是一个二元操作函数,用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
lt = [4, 2, 7, 4, 5, 8]
def add(a,b):
return a + b
rs = map(add, lt)
print(rs) # 30
让字典保持有序
传统的字典Dict存储之后,字典是无序的。dict1 = {'a':1,'b':2,'c':3} 迭代出来可能是 {'a':1,'c':3,'b':2}。
collections中的OrderderDict: 保证了先存进的key 会排在字典的前面位置
模拟考试,学生一个个退场后记录
from time import time
from random import randint
from collections import OrderedDict
d=OrderedDict()
student=['白嘉轩', '田小娥', '白灵灵', '鹿兆鹏', '白孝义', '鹿兆海', '白孝文'] #《白鹿原》书中部分角色名,很不错的一本书。
start=time() #开始计时
for i in range(len(student)):
input() #等待输入,模拟交卷动作,
s=student.pop(randint(0,len(student)-1-i)) #每次随机出来pop出来一个
end =time() #结束时间
print(i+1,s,end-start)
d[s]=(i+1,end-start)
print('-'*50)
for k in d:
print(k,d[k])