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文件处理
Feb 29 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
Python选课系统开发程序
Sep 02 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Python笔记之facade模式
Nov 20 Python
Python面向对象封装操作案例详解
Dec 31 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
Python基于time模块表示时间常用方法
Jun 18 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
Python3+Flask安装使用教程详解
Feb 16 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 安全检测代码片段(分享)
2013/07/05 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
vuex入门最详细整理
2020/03/04 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
详解Python装饰器由浅入深
2016/12/09 Python
Python 调用Java实例详解
2017/06/02 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
通过shell+python实现企业微信预警
2019/03/07 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
Python实现弹球小游戏
2020/08/01 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
英语硕士生求职简历的自我评价
2013/10/15 职场文书
给男朋友的道歉信
2014/01/12 职场文书
家长寄语大全
2014/04/02 职场文书
遗产继承公证书
2014/04/09 职场文书
2014全年工作总结
2014/11/27 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang