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抓取豆瓣图片并自动保存示例学习
Jan 10 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
Python爬取十篇新闻统计TF-IDF
Jan 03 Python
python生成1行四列全2矩阵的方法
Aug 04 Python
pandas 时间格式转换的实现
Jul 06 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
python脚本执行CMD命令并返回结果的例子
Aug 14 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
Django 删除upload_to文件的步骤
Mar 30 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
BBS(php & mysql)完整版(五)
2006/10/09 PHP
phplot生成图片类用法详解
2015/01/06 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
简单谈谈Python中的json与pickle
2017/07/19 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
django框架模板语言使用方法详解
2019/07/18 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
Python如何读写字节数据
2020/08/05 Python
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
一套中级Java程序员笔试题
2015/01/14 面试题
商务英语求职自荐信范文
2013/12/24 职场文书
服装店营销方案
2014/03/10 职场文书