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多线程学习资料
Dec 19 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
Python实现的堆排序算法示例
Apr 29 Python
python 常用的基础函数
Jul 10 Python
Python微信操控itchat的方法
May 31 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
在notepad++中实现直接运行python代码
Dec 18 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
Python使用pyexecjs代码案例解析
Jul 13 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 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+jQuery实现自动补全功能源码
2013/05/15 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
取得传值的函数
2006/10/27 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
python实现分页效果
2017/10/25 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
浅析Python 多行匹配模式
2020/07/24 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题
两年的个人工作自我评价
2014/01/10 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2014年度个人工作总结
2014/11/07 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
起诉状范本
2015/05/20 职场文书