zoukankan      html  css  js  c++  java
  • 如何快速找到多个字典的公共键(key)?

    需求:
    西班牙甲级联赛,每轮球员进球统计:
    第一轮:{'苏亚雷斯':1,'梅西':2,'本泽马':1...}
    第二轮:{'苏亚雷斯':1,'C罗':1'格里兹曼':2...}
    第三轮:{'苏亚雷斯':1,'托雷斯':2,'贝尔':1...}
    统计出前N轮,每场比赛都有进球的球员

    思路:
    方法一:利用for对每个字典进行迭代,进行in来进行判断
    方法二:利用集合(set)的交集操作
    1、使用字典的keys方法得到一个字典的keys的集合
    2、使用map函数,得到每个字典的集合
    3、使用reduce函数,取所有字典keys集合的交集

    代码:

    # 方法一:
    >>> from random import randint,sample
    >>> sample('abcdefg',3)
    ['a', 'g', 'e']
    >>> sample('abcdefgh',randint(3,6))
    ['d', 'g', 'b', 'f', 'e']
    >>> d1 = {k: randint(1,4) for k in sample('abcdefgh',randint(3,6))}
    
    >>> d2 = {k: randint(1,4) for k in sample('abcdefgh',randint(3,6))}
    
    >>> d3 = {k: randint(1,4) for k in sample('abcdefgh',randint(3,6))}
    
    >>> d1
    {'a': 1, 'e': 4, 'b': 1, 'd': 3, 'g': 3, 'f': 4}
    
    >>> d2
    {'c': 4, 'f': 4, 'g': 3, 'e': 4, 'b': 3}
    
    >>> d3
    {'e': 2, 'd': 1, 'b': 4, 'a': 1}
    
    >>> for k in d1:
    ...     if k in d2 and k in d3:
    ...         print(k)
    ... 
    e
    b
    
    >>> [ k for k in d1 if k in d2 and k in d3]
    ['e', 'b']
    
    >>> dl = [d1,d2,d3] # dl的长度不定长
    
    >>> [ k for k in dl[0] if all(map(lambda d: k in d,dl[1:]))] # map返回的是true或者false的集合,更具有普遍性
    ['e', 'b']
    
    # 方法二:
    >>> s1 = d1.keys()
    
    >>> s1
    dict_keys(['a', 'e', 'b', 'd', 'g', 'f'])
    
    >>> s2 = d2.keys()
    
    >>> s2
    dict_keys(['c', 'f', 'g', 'e', 'b'])
    
    >>> s1 & s2
    {'b', 'e', 'f', 'g'}
    
    >>> reduce
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-37-62f6239f03f9> in <module>
    ----> 1 reduce
    
    NameError: name 'reduce' is not defined
    
    >>> from functools import reduce
    
    >>> reduce(lambda a,b:a * b,range(1,11))
    3628800
    
    >>> dl
    [{'a': 1, 'e': 4, 'b': 1, 'd': 3, 'g': 3, 'f': 4},
     {'c': 4, 'f': 4, 'g': 3, 'e': 4, 'b': 3},
     {'e': 2, 'd': 1, 'b': 4, 'a': 1}]
    
    >>> d1.keys
    <function dict.keys>
    
    >>> d1.keys()
    dict_keys(['a', 'e', 'b', 'd', 'g', 'f'])
    
    >>> dict.keys(d1)
    dict_keys(['a', 'e', 'b', 'd', 'g', 'f'])
    
    >>> map(dict.keys,dl)
    <map at 0x7f3ae8277c50>
    
    >>> list(map(dict.keys,dl))
    [dict_keys(['a', 'e', 'b', 'd', 'g', 'f']),
     dict_keys(['c', 'f', 'g', 'e', 'b']),
     dict_keys(['e', 'd', 'b', 'a'])]
    
    >>> reduce(lambda a,b :a & b ,map(dict.keys,dl))
    {'b', 'e'}
    
  • 相关阅读:
    TextOut和DrawText
    VC中字符串定义
    #define new DEBUG_NEW
    洛谷【P2257】 YY的GCD
    Lizards and Basements 2 解题报告
    在windows服务中添加WCF
    从数据库中获得表的字段和描述信息
    sql格式化工具
    在XPSP3中添允许多个远程桌面的步骤
    无法连接到WCF的异常
  • 原文地址:https://www.cnblogs.com/Richardo-M-Q/p/13902084.html
Copyright © 2011-2022 走看看