Python如何快速找到多个字典中的公共键(key)


Posted in Python onApril 29, 2022

1、如何快速找到多个字典中的公共键(key)

实际案例:

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

  • 第一轮:{'苏亚雷斯': 1, '梅西': 2, '本泽马': 1, 'C罗': 3, ...}
  • 第二轮:{'苏亚雷斯': 2, 'C罗': 1, '格里丝曼': 2, '贝尔': 1, ...}
  • 第三轮:{'苏亚雷斯': 1, '托雷斯': 2, '贝尔': 1, '内马尔': 1, ...}

 统计出前N轮,每场比赛都有进球的球员。

注:公共键就是在每个字典中都出现的键。

解决方案:

利用集合(set)的交集操作

  • Step1:使用字典的keys()方法,得到一个字典keys的集合;
  • Step2:使用map函数,得到所有字典的keys的集合;
  • Step3:使用reduce函数,取所有字典的keys集合的交集。

2、代码演示

from random import randint, sample 
# 随机取样进球球员信息
print(sample('abcdef', randint(3, 6)))
# 字典解析产生每轮数据
s1 = {x: randint(1, 4) for x in sample('abcdef', randint(3, 6))}
s2 = {x: randint(1, 4) for x in sample('abcdef', randint(3, 6))}
s3 = {x: randint(1, 4) for x in sample('abcdef', randint(3, 6))}
print(s1, s2, s3)
# 方法1:
# 迭代第1轮中键,之后再去判断这个key是否在s2和s3当中,如果在就表示这个键是公共键
res = []
for k in s1:
    if k in s2 and k in s3:
        res.append(k)
print(res)
 
# 方法2:
# 获取每一个字典中的所有key,python2为viewkeys()
print(s1.keys(), s2.keys(), s3.keys())
# 取所有集合的&交集,就是公共键
print(s1.keys() & s2.keys() & s3.keys())
 
# 方法3:
# 使用map得到每一轮的keys集合
print(list(map(dict.keys, [s1, s2, s3])))
 
from functools import reduce
# 使用reduce函数,取每一轮的keys集合的交集
print(reduce(lambda a, b: a & b, map(dict.keys, [s1, s2, s3])))

3、快速找到多个字典中的公共键(key)的方法(补充)

方法一:for in循环

from random import randint, sample
a1 = {k: randint(1, 4) for k in 'abcdefg'}
a2 = {k: randint(1, 4) for k in 'abc123456789'}
a3 = {k: randint(1, 4) for k in 'abcinubububu'}
a4 = {k: randint(1, 4) for k in 'abc89898989'}
r = []
for x in a1:
    if x in a2 and x in a3 and x in a4:
        r.append(x)
print(r)
randint(1, 4)  # 从1~4间随机取一个数

方法二:利用集合的交集操作

from random import randint, sample
a1 = {k: randint(1, 4) for k in 'abcdefg'}
a2 = {k: randint(1, 4) for k in 'abcdefg'}
a3 = {k: randint(1, 4) for k in 'abcdefg'}
a4 = {k: randint(1, 4) for k in 'abcdefg'}
a = a1.keys() & a2.keys() & a3.keys() & a4.keys()
print(a)

a1.keys():得到a1字典的key,一set格式;
a1.keys() & a2.keys() & a3.keys() & a4.keys():取4个集合的公共元素;
a为一个集合(set)

方法三:使用map即reduce(用于求n个字典的公共key)

from random import randint, sample
from functools import reduce
a1 = {k: randint(1, 4) for k in 'abcdefg'}
a2 = {k: randint(1, 4) for k in 'abcdefg'}
a3 = {k: randint(1, 4) for k in 'abcdefg'}
a4 = {k: randint(1, 4) for k in 'abcdefg'}
b1 = map(dict.keys, [a1, a2, a3, a4])
b2 = reduce(lambda a ,b: a & b, b1)
print(b2)
b1 = map(dict.keys, [a1, a2, a3, a4])  #以集合形式取每个字典的keys;

到此这篇关于Python查找多个字典公共键key的方法的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
Python常见文件操作的函数示例代码
Nov 15 Python
python判断、获取一张图片主色调的2个实例
Apr 10 Python
使用python调用浏览器并打开一个网址的例子
Jun 05 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
Pytorch之卷积层的使用详解
Dec 31 Python
Python pip install如何修改默认下载路径
Apr 29 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
python可以用哪些数据库
Jun 22 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
Python发送邮件实现基础解析
Aug 14 Python
Python如何让字典保持有序排列
Apr 29 #Python
Python按顺序遍历并读取文件夹中文件
Apr 29 #Python
Python保存并浏览用户的历史记录
Apr 29 #Python
python解析json数据
Apr 29 #Python
python的html标准库
Apr 29 #Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 #Python
python数据处理之Pandas类型转换
You might like
用libtemplate实现静态网页生成
2006/10/09 PHP
php笔记之:AOP的应用
2013/04/24 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
我就是这样学习Python中的列表
2019/06/02 Python
python集合是否可变总结
2019/06/20 Python
python能自学吗
2020/06/18 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
高中军训的心得体会
2014/09/01 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android
Python socket如何解析HTTP请求内容
2022/02/12 Python
python_tkinter事件类型详情
2022/03/20 Python