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的Django框架部署的一些建议
Apr 09 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
python通过zabbix api获取主机
Sep 17 Python
Python版名片管理系统
Nov 30 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
django celery redis使用具体实践
Apr 08 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
Python生成九宫格图片的示例代码
Apr 14 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判断是否为json格式的方法
2014/03/04 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
Javascript常考语句107条收集
2010/03/09 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
python的迭代器与生成器实例详解
2014/07/16 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
深入理解Django的自定义过滤器
2017/10/17 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
学生档案自我鉴定
2013/10/07 职场文书
关爱留守儿童标语
2014/06/18 职场文书
婚庆公司计划书
2014/09/15 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
交通安全学习心得体会
2016/01/18 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
高中英语教学反思范文
2016/03/02 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang