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 相关文章推荐
Django接受前端数据的几种方法总结
Nov 04 Python
python 环境变量和import模块导入方法(详解)
Jul 11 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
python贪吃蛇游戏代码
Apr 18 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
Python爬取12306车次信息代码详解
Aug 12 Python
pyqt5实现井字棋的示例代码
Dec 07 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
在 Golang 中实现 Cache::remember 方法详解
Mar 30 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实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
校园活动策划书范文
2014/01/10 职场文书
文明学生标兵事迹
2014/01/21 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
征兵宣传标语
2014/06/20 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
检察院起诉意见书
2015/05/20 职场文书
SQL Server Agent 服务无法启动
2022/04/20 SQL Server