python实用技巧2之(公共键、random方法、islice、pickle)

一、求得多个字典的公共健
1、用set()集合来求交集 (可以了解一下 dict 和 set 之间的区别,与在C++中map 和 set 的区别是差不多的)
2、用map()来得到每个字典的key
3、用reduce来进行迭代(不知道迭代用的恰不恰当)
<1>、reduce的介绍

from functools import reduce  //py3之后不再是一个内置函数了
//求1~10的阶乘,我们可以看出reduce可以接收两个参数,且是第一步运算得到的数再与新的数做运算
factoral = reduce(lambda a, b: a*b, range(1, 11))
print(factoral) #3628800

数据的配置

d1 = {
    'a': 1,
    'b': 1,
    'c': 2
}

d2 = {
    'a': 1,
    'b': 1,
    'd': 2
}

我们要求d1 和 d2中公共的键,当然可以有n个,作为实例我就不设置太多了呀

d = [d1, d2]
res = reduce(lambda a, b: a&b, map(dict.keys, d))
print(res) #{'b', 'a'}

二、random中randint ,sample and shuffle函数,可以获得随机的字和其他自己定义的字符和打乱list的顺序

from random import sample, randint, shuffle

players = list("abcdef")
shuffle(players)
a = sample('abc', 2)
b = randint(2, 10)
print(a) #['b', 'c']
print(b) #3
print(players) #['d', 'b', 'e', 'a', 'f', 'c']

三、怎么让字典有序呢

from random import shuffle

players = list('abcedf');
shuffle(players)

from collections import OrderedDict  #有序的字典
od = OrderedDict()
od = {name:rank for rank, name in enumerate(players, 1)}
print(od) #{'e': 1, 'c': 2, 'd': 3, 'b': 4, 'a': 5, 'f': 6}

四、itertools 中的 islice 函数进行切片操作

from itertools import islice
print(list(islice(od, 3, 6))) #['e', 'a', 'c']

五、双端队列的操作(其实可以与C++中优先队列做一下比较,如果有一个算法呀找到前k个最大值)
operate :pop() 出队列 append() 进队列

from collections import deque
dq = deque([], 5) //接收两个参数,初始化,和最大存放数量
dq.append(1)
dq.append(2)
dq.append(3)
dq.append(4)
dq.append(5)
dq.append(6)
print(dq)  #deque([2, 3, 4, 5, 6], maxlen=5) 之前的1就会被挤出去

六、pickle 模块可以将某些记录放在磁盘里面再读出来(以二进制的方式来进行读写的哦)
operate:
dump()接收两个参数,第一个要保存的things,第二个参数open一个文件,并且以二进制进行写
load()接收一个参数,接收一个open一个文件,并且以二进制进行读

import pickle

pickle.dump(dq, open('recode.pkl', 'wb'))

q = pickle.load(open('recode.pkl', 'rb'))
print(q) #deque([2, 3, 4, 5, 6], maxlen=5) 与前面的结果相同

猜你喜欢

转载自blog.csdn.net/qq_37982109/article/details/88690943