寻找多个字典中的公共键

首先想到的做法,用for循环

s1 = {k:randint(1,4) for k in sample('abcxyz',randint(4,6))}
s2 = {k:randint(1,4) for k in sample('abcxyz',randint(4,6))}
s3 = {k:randint(1,4) for k in sample('abcxyz',randint(4,6))}
#s1 = {'a':2,'x':4,'c':2,'b':4}
#s2 = {'y':3,'c':1,'z':4,'b':2}
#s3 = {'a';2,'c':1,'b':4,'y':3,'x':1,'z':4}

l = []
for x in s1:
    if x in s2 and x in s3:
        l.append(x)
 #l = ['c', 'b']

更高效的方法是先转换成集合,再求交集

#D.viewkeys() -> a set - like object providing a view on D's keys

s1.viewkeys() & s2.viewkeys() & s3.viewkeys()
#['c','b']

如果字典数量更多,就要考虑使用map()和reduce()

#map(function, sequence[, sequence, ...]) -> list
#reduce(function, sequence[, initial]) -> value

reduce(lambda x,y:x & y, map(dict.viewkeys, [s1, s2, s3]))
#set(['c', 'b'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值