【问题标题】:Returning all keys that have the same corresponding value in a dictionary with python使用python返回字典中具有相同对应值的所有键
【发布时间】:2014-03-01 20:32:35
【问题描述】:

我是这个网站的新手,我遇到了一个需要帮助的问题。我试图在字典中找到最高整数值和相应的键,然后检查是否有其他键具有相同的值。如果有重复的值,我想随机选择其中一个并将其返回。截至目前,代码可以找到字典中的最大值并返回键,但每次都返回相同的键。我无法检查具有相同值的其他键。

def lvl2():
    global aiMove2
    posValueD = {}
    for x in moveList(): #Movelist returns a list of tuples
        m = aiFlip(x) #aiFlip returns an integer
        posValueD[x] = m
    aiMove2 = max(posValueD, key = posValueD.get)
    return aiMove2

【问题讨论】:

    标签: python dictionary key


    【解决方案1】:

    得到最大值后,可以检查每个键的值。如果与 aiMove2 相同,此理解列表返回一个键列表,其中关联的值。

    keys = [x for x,y in posValueD.items() if y == posValueD[aiMove2]]
    

    以下是 Python shell 中的示例:

    >>> a = {'a':1, 'b':2, 'c':2}
    >>> [x for x,y in a.items() if y == 2]
    ['c', 'b']
    

    【讨论】:

    • 非常感谢!完美运行。
    【解决方案2】:

    你可以这样写:

    max_value = 0
    max_keys = []
    for key,value in myDict.iteritems():
      if value > max_value:
        max_value = value
        max_keys = [key]
      elif value == max_value:
        max_keys.append(key)
    if max_keys:
      return random.choice(max_keys)
    return None
    

    【讨论】:

      【解决方案3】:

      你可以使用 itertools groupby:

      from itertools import groupby
      di={'e': 0, 'd': 1, 'g': 2, 'f': 0, 'a': 1, 'c': 3, 'b': 2, 'l': 2, 'i': 1, 'h': 3, 'k': 0, 'j': 1}
      
      groups=[]
      for k, g in groupby(sorted(di.items(), key=lambda t: (-t[1], t[0])), lambda t: t[1]):
          groups.append(list(g))
      
      print(groups)
      # [[('c', 3), ('h', 3)], 
         [('b', 2), ('g', 2), ('l', 2)], 
         [('a', 1), ('d', 1), ('i', 1), ('j', 1)], 
         [('e', 0), ('f', 0), ('k', 0)]]
      

      或者,更简洁:

      print([list(g) for k, g in groupby(
              sorted(di.items(), key=lambda t: (-t[1], t[0])), 
              lambda t: t[1])])
      

      然后只取列表的组列表中的第一个列表。

      【讨论】:

        猜你喜欢
        • 2013-08-07
        • 1970-01-01
        • 2014-04-27
        • 2019-04-24
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2022-11-29
        • 1970-01-01
        相关资源
        最近更新 更多