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 13 Python
使用python调用zxing库生成二维码图片详解
Jan 10 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
Python的iOS自动化打包实例代码
Nov 22 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
python sort、sort_index方法代码实例
Mar 28 Python
wxpython绘制圆角窗体
Nov 18 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
keras用auc做metrics以及早停实例
Jul 02 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 URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
Angular2 http jsonp的实例详解
2017/08/31 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
python正则表达式中的括号匹配问题
2014/12/14 Python
Python读大数据txt
2016/03/28 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
详解python中的hashlib模块的使用
2019/04/22 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
瑞士国际航空官网:SWISS
2016/07/21 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
opencv实现图像几何变换
2021/03/24 Python
文明寝室申报材料
2014/05/12 职场文书
法律系毕业生求职信
2014/05/28 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python
Golang 链表的学习和使用
2022/04/19 Golang