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 相关文章推荐
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
numpy自动生成数组详解
Dec 15 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Python Requests库基本用法示例
Aug 20 Python
详解python调用cmd命令三种方法
Jul 08 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
python 实现屏幕录制示例
Dec 23 Python
Python:type、object、class与内置类型实例
Dec 25 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
python实现简单文件读写函数
Feb 25 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的中问验证码
2006/11/25 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
Python中is与==判断的区别
2017/03/28 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Python内存映射文件读写方式
2020/04/24 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
百联网上商城:i百联
2017/01/28 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
初中数学教学反思
2014/01/16 职场文书
上课迟到检讨书
2014/01/19 职场文书
工作求职信
2014/07/04 职场文书
学习十八大的心得体会
2014/09/01 职场文书
装配出错检讨书
2014/09/23 职场文书
四风查摆剖析材料
2014/10/10 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
邀请函格式范文
2015/02/02 职场文书
超市督导岗位职责
2015/04/10 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
教师节晚会主持词
2015/06/30 职场文书
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电