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运用于数据分析的简单教程
Mar 27 Python
总结Python编程中函数的使用要点
Mar 20 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
Django中Middleware中的函数详解
Jul 18 Python
python之pexpect实现自动交互的例子
Jul 25 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
Apr 13 Python
Python+Kepler.gl实现时间轮播地图过程解析
Jul 20 Python
Python基于字典实现switch case函数调用
Jul 22 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 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
Terran兵种对照表
2020/03/14 星际争霸
PHP 面向对象 final类与final方法
2010/05/05 PHP
php防止sql注入代码实例
2013/12/18 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
JQuery基础语法小结
2015/02/27 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
python遍历目录的方法小结
2016/04/28 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
python实发邮件实例详解
2019/11/11 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
大学生简单自荐信
2013/11/10 职场文书
财务部总监岗位职责
2014/03/12 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
企业年会主持词
2014/03/27 职场文书
公司节能减排方案
2014/05/16 职场文书
2015年话务员工作总结
2015/04/29 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
高三教师工作总结2015
2015/07/21 职场文书
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android