如何快速找到多个字典中的公共键

注:本文使用python 3.5.2版本


有时候在统计数据的时候,我们需要知道多个字典的公共键。比如学校校运会,统计了某班级参赛学生成绩名次:

100米:{'小明': 1, '李雷': 6, '小李': 17, ...}

铅球:{'李雷': 9, '露西': 24, ...}

接力:{'小李': 2, '露西': 16, '李雷': 5, ...}

现在要统计该有哪些学生同时报了100米,铅球,接力三项比赛。

一般思路是将这3个字典的键做与运算,就能得出公共的键:

d1 = {'a': 1, 'c': 6, 'g': 17, 'd': 21, 'h': 4}
d2 = {'c': 9, 'f': 24, 'd': 13, 'h': 27}
d3 = {'b': 2, 'd': 16, 'h': 5}
name = []
for k in d1:
    if k in d2 and k in d3:
        name.append(k)
print(name)     # ['d', 'h']

这种方法代码不够简洁,执行效率也不够好(当字典十分庞大的时候)。

本文主要介绍下面两种方法:

用集合(set)做交集运算的方式实现公共键
# 字典的viewkeys()方法得到字典keys集合
print(d1.keys() & d2.keys() & d3.keys())    # {'d', 'h'}
用map和reduce函数实现公共键

如果字典比较多的话,用集合的方法写起来比较繁琐,可以用map和reduce函数来处理:

from functools import reduce
# map函数得到所有字典keys集合
# reduce函数得到所有字典keys的交集
re = reduce(lambda x, y: x & y, map(dict.keys, [d1, d2, d3]))
print(re)

map和reduce函数介绍可以参考廖大的教程:高阶函数–map/reduce

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值