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 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
Python通过解析网页实现看报程序的方法
Aug 04 Python
python rsa 加密解密
Mar 20 Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 Python
Python队列的定义与使用方法示例
Jun 24 Python
python编写猜数字小游戏
Oct 06 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
python redis存入字典序列化存储教程
Jul 16 Python
python如何操作mysql
Aug 17 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
php 静态化实现代码
2009/03/20 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
js资料toString 方法
2007/03/13 Javascript
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
Python函数装饰器实现方法详解
2018/12/22 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
flask应用部署到服务器的方法
2019/07/12 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
MYSQL支持事务吗
2013/08/09 面试题
英语系本科生个人求职信
2013/09/21 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
大二学期个人自我评价
2014/01/13 职场文书
元旦寄语大全
2014/04/10 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js