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实现探测socket和web服务示例
Mar 28 Python
跟老齐学Python之一个免费的实验室
Sep 14 Python
Python pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
python发送邮件实例分享
Jul 28 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
一份python入门应该看的学习资料
Apr 11 Python
Python切片索引用法示例
May 15 Python
Python get获取页面cookie代码实例
Sep 12 Python
对pandas的行列名更改与数据选择详解
Nov 12 Python
对Python闭包与延迟绑定的方法详解
Jan 07 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
Numpy的简单用法小结
Aug 28 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自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
Python环境变量设置方法
2016/08/28 Python
python如何进入交互模式
2020/07/06 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
资深地理教师自我评价
2013/09/21 职场文书
预备党员政审材料
2014/02/04 职场文书
产品售后服务承诺书
2014/05/21 职场文书
老龄工作先进事迹
2014/08/15 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
2014年教研工作总结
2014/12/06 职场文书