场景实例:

西班牙足球联赛,每轮球员进球统计:

第一轮:{’1’:1,‘2’:4,‘5’:2,‘7’:3}

  第一轮:{’2’:1,‘5’:4,‘6’:2,‘3’:3}

第一轮:{’1’:1,‘4’:4,‘6’:2,‘7’:3}

……

问题:统计前N轮,都进球的球员?

如何解决这个问题呢?

方法1:

#!/usr/bin/python3

from random import randint, sample

def get_s(player):
# 获得三个赛季的随机记录
s1 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s2 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s3 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
return s1, s2, s3 def public_keys(s1, s2, s3):
# 定义中间列表
median = [] # 判断字典公共key,在s1,在s2,在s3肯定是公共key
for key in s1:
if key in s2 and key in s3:
median.append(key)
return median if __name__ == '__main__':
# 生成abcdef个球员
player = 'abcdef' # 获得3个赛季的随机数
s1, s2, s3 = get_s(player) # 获取3个赛季都进球的球员
result = public_keys(s1,s2,s3)
print(result)

方法2:

进球的球员都是数据中的key,通过求出每一轮的keys,然后做个交集就可以求出结果

#!/usr/bin/python3

from random import randint, sample

def get_s(player):
# 获得三个赛季的随机记录
s1 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s2 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s3 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
return s1, s2, s3 def public_keys(s1, s2, s3):
# 返回各字典的单边值,并求出交集,即是结果
return s1.keys() & s2.keys() & s3.keys() if __name__ == '__main__':
# 生成abcdef个球员
player = 'abcdef' # 获得3个赛季的随机数
s1, s2, s3 = get_s(player) # 获取3个赛季都进球的球员
result = public_keys(s1, s2, s3)
print(result)

  方法3:

  当N轮时候,通过map和reduce函数

#!/usr/bin/python3

from random import randint, sample
from functools import reduce def get_s(player):
# 获得三个赛季的随机记录
s1 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s2 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s3 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
return s1, s2, s3 def public_keys(s1, s2, s3):
result = reduce(lambda a, b: a & b, map(dict.keys, [s1, s2, s3]))
# map(dict. keys,[s1,s2,s3,......N] 获得每轮的keys集合,s1……N为字典对象
# reduce((lamda a,b: a&b,map()) 把map获得的集合,依次放入a,b,返回交集
# a,b = a&b, map中取出的一个值map(dict.keys, [s1, s2, s3])取得新的列表
# reduce中的lambda只能传入两个参数
# map 为高阶函数,接收一个map(函数, [参数]),迭代参数列表,一个传入函数中处理,返回处理结果变成新的列表 return result if __name__ == '__main__':
# 生成abcdef个球员
player = 'abcdef' # 获得3个赛季的随机数
s1, s2, s3 = get_s(player) # 获取3个赛季都进球的球员
result = public_keys(s1, s2, s3)
print(result)

Python-找字典中公共key-zip reduce lambda的更多相关文章

  1. python_如何快速找打字典中公共key

    场景实例: 西班牙足球联赛,每轮球员进球统计: 第一轮:{'1':1,'2':4,'5':2,'7':3} 第一轮:{'2':1,'5':4,'6':2,'3':3} 第一轮:{'1':1,'4':4 ...

  2. python 根据字典中的key,value进行排序

    #coding=utf-8 import requests,json,collections,base64,datetime def sort(datas): data=json.dumps(data ...

  3. python 遍历字典中的键和值

    #遍历字典中的所有键和值 zd1={"姓名":"张三","年龄":20,"性别":"女"} zd2= ...

  4. python几个特别函数map filter reduce lambda

    lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x): return x**2 print f(4) Python中使用lambda的话,写成这样 g = l ...

  5. pythno学习小结-替换python字典中的key值

    源: d={'a':1,'b':2,'c':3} 目标:key:'b'替换为'e' d={'a':1,'e':2,'c':3} 方法: d['e']=d.pop('b')

  6. python判断字典中key是否存在

    例:#生成一个字典d = {'title':'abc','age':18} if 'title' in d.keys(): print('存在')else: print('不存在') if 'titl ...

  7. 替换python字典中的key值

  8. 迭代字典中的key和value

    字典是python中十分重要的一个内容. 今天我们来谈谈,在一个 for 循环中,能否同时迭代 key和value?当然可以咯. dict 对象的 items() 方法返回的值: >>&g ...

  9. python 对字典分别按照key值、value值进行排序

    1.sorted函数首先介绍sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数. 其中iterable表示 ...

随机推荐

  1. 解Bug之路-dubbo应用无法重连zookeeper

    前言 dubbo是一个成熟且被广泛运用的框架.饶是如此,在某些极端条件下基于dubbo的应用还会出现无法重连zookeeper的问题.由于此问题容易导致比较大的故障,所以笔者费了一番功夫去定位,现将排 ...

  2. MYSQL经典练习题,熟悉DQL

    MYSQL经典练习题 (本练习题可让你熟悉DQL,快速的上手DQL) 首先,先在数据库中建立基本数据库以及表项: DROP DATABASE IF EXISTS `test`; CREATE DATA ...

  3. MySQL锁这块石头似乎没有我想的那么重

    前言 前言为本人写这篇文章的牢骚,建议跳过不看.   之前好几次都想好好的学习MySQL中的锁,但是找了几篇文章,看了一些锁的类型有那么多种,一时间也没看懂是什么意思,于是跟自己说先放松下自己,便从书 ...

  4. Python开发的入门教程(八)-迭代

    介绍 本文主要介绍Python中迭代的基本知识和使用 什么是迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Ite ...

  5. Fitness - 05.04

    倒计时241天 运动38分钟,共计9组.拉伸10分钟. 每组跑步2分钟(6.3KM/h),走路2分钟(6KM/h). 上午下了课,直奔健身房. 手机坏了,没有听音乐. 没有吃午饭,但是上午喝的咖啡还是 ...

  6. MPI Maelstrom (Dijstra+atoi函数转换整数)

    BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distribute ...

  7. [BUUOJ记录] [HCTF 2018]WarmUp

    BUUOJ Web的第一题,其实是很有质量的一道题,但是不知道为什么成了Solved最多的题目,也被师傅们笑称是“劝退题”,这道题的原型应该是来自于phpMyadmin的一个文件包含漏洞(CVE-20 ...

  8. leetcode刷题-73矩阵置零

    题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [  [1,1,1],  [1,0,1],  [1,1,1]]输出: ...

  9. Mybatis-使用注解开发

    使用注解开发 [toc] 1. 面向接口编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 ...

  10. 企业网站还是要考虑兼容至少IE10

    中国国情,大部分企业还在使用win7,IE浏览器.为了兼容这些,还是少用比较VUE等一些高级的框架,改为使用jquery.用惯了VUE,jquey好多忘得差不多了,其中遇到的问题及解决方案 ajax, ...