美文网首页
如何快速找到多个字典的公共键(key)

如何快速找到多个字典的公共键(key)

作者: 以七v为书 | 来源:发表于2018-12-18 15:05 被阅读0次

    实际案例:
    足球联赛,对于每轮球员的进球进行统计:
    第一轮:{'梅西':2,'本泽马':1,'C罗':3}
    第二轮:{'梅西':4,'格里兹曼':1,'C罗':3}
    第三轮:{'梅西':2,'贝尔':1,'C罗':3}
    统计出前N轮,每场比赛都有进球的球员。

    普通方法:

    from random import randint, sample
    # 随机取样出3到5个
    persons = sample('abcdefg',randint(3,6))
    
    dic1 = {k:randint(0,5) for k in persons}
    dic2 = {k:randint(0,5) for k in persons}
    dic3 = {k:randint(0,5) for k in persons}
    
    res = set()
    # 遍历dic1的key。
    # 如果dic2与dic3中也有这个key,将其保存进res
    for k in dic1:
        if k in dic2 and k in dic3:
            res.add(k)
    print res
    

    优化方案

    • 利用字典的viewskeys()方法,得到一个字典keys的集合
    • 利用map函数,得到所有字典的keys的集合
    • 使用reduce函数,取所有字典的keys的集合的交集

    利用字典的viewskeys()方法,得到一个字典keys的集合

    print type(dic1.viewkeys())
    
    print dic1.viewkeys() & dic2.viewkeys() & dic3.viewkeys()
    

    利用map函数,得到所有字典的keys的集合解决n轮比较

    worklist =[dic1,dic2,dic3]
    print map(dict.viewkeys,worklist)
    
    print reduce(lambda a,b:a & b,map(dict.viewkeys,worklist))
    

    相关文章

      网友评论

          本文标题:如何快速找到多个字典的公共键(key)

          本文链接:https://www.haomeiwen.com/subject/uzhlkqtx.html