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的Tornado框架实现一个简单的WebQQ机器人
Apr 24 Python
Python编程中使用Pillow来处理图像的基础教程
Nov 20 Python
python实现逻辑回归的方法示例
May 02 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
python实现logistic分类算法代码
Feb 28 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 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实现图片添加水印功能
2014/02/13 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
对python周期性定时器的示例详解
2019/02/19 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
使用django自带的user做外键的方法
2020/11/30 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
模具设计与制造专业推荐信
2014/02/16 职场文书
大班开学家长寄语
2014/04/04 职场文书
大学新闻系求职信
2014/06/03 职场文书
2014财务年终工作总结
2014/12/08 职场文书
Java实现带图形界面的聊天程序
2022/06/10 Java/Android