Python中级基础系列3.6(三)之——快速找到多个字典的公共键以及让字典保持有序

浏览: 1537

快速找到多个字典的公共键

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])

Clipboard Image.png

推荐 0
本文由 粽子job 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册