代码之家  ›  专栏  ›  技术社区  ›  Buddy Bob Youngkhaf

查找具有相同未知值的所有键

  •  1
  • Buddy Bob Youngkhaf  · 技术社区  · 5 年前

    我在网上到处找,问这样一个问题:怎样才能在字典里找到所有具有相同值的键。但这个数值不得而知。最接近的是 this ,但值是已知的。

    假设我有一本这样的字典,这些值完全是随机的,不是我硬编码的。

    {'AGAA': 2, 'ATAA': 5,'AJAA':2}
    

    如何识别具有相同值的所有键?最有效的方法是什么。

    ['AGAA','AJAA']
    
    3 回复  |  直到 5 年前
        1
  •  3
  •   flakes    5 年前

    我要做的就是把字典翻过来。我的意思是对每个公共值的键进行分组。所以如果你从以下几点开始:

    {'AGAA': 2, 'ATAA': 5, 'AJAA': 2}
    

    {2: ['AGAA', 'AJAA'], 5: ['ATAA']}
    

    将值分组后,可以使用 max 确定最大分组。

    from collections import defaultdict
    
    data = {'AGAA': 2, 'ATAA': 5, 'AJAA': 2}
    
    grouped = defaultdict(list)
    for key in data:
        grouped[data[key]].append(key)
    
    max_group = max(grouped.values(), key=len)
    print(max_group)
    

    输出:

    ['AGAA', 'AJAA']
    

    您还可以找到max键并按以下方式打印:

    max_key = max(grouped, key=lambda k: len(grouped[k]))
    print(grouped[max_key])
    
        2
  •  0
  •   Andreas    5 年前

    from collections import Counter
    
    d = {'AGAA': 2, 'ATAA': 5,'AJAA':2}
    
    l = Counter(d.values())
    l = [x for x,y in l.items() if y > 1]
    
    out = [x for x,y in d.items() if y in l]
    # Out[21]: ['AGAA', 'AJAA']
    
        3
  •  -1
  •   Lucvv    5 年前

    这可以使用例如。 defaultdict

    from collections import defaultdict
    
    
    dict1 = {'AGAA': 2, 'ATAA': 5,'AJAA':2}  # your dict
    dict2 = defaultdict(list)
    for k,v in dict1.items():
        dict2[v].append(k)
    

    现在,如果您打印dict2,它将给出:

    defaultdict(list, {2: ['AGAA', 'AJAA'], 5: ['ATAA']})
    

    然后打电话来 dict2[2] 将提供: ['AGAA', 'AJAA']