使用python返回字典中具有相同对应值的所有键

使用python返回字典中具有相同对应值的所有键,python,dictionary,key,Python,Dictionary,Key,我是这个网站的新手,我有一个问题需要帮助。我试图找到字典中的最高整数值和对应的键,然后检查是否有其他键具有相同的值。如果有重复的值,我想随机选择其中一个并返回它。到目前为止,代码可以在字典中找到最高值并返回键,但每次都返回相同的键。我无法检查其他具有相同值的键 def lvl2(): global aiMove2 posValueD = {} for x in moveList(): #Movelist returns a list of tuples m

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

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

获得最大值后,可以检查每个键的值。此理解列表返回一个键列表,其中的值与
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']

你可以这样写:

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

您可以使用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])])

然后,只需获取组列表中的第一个列表

非常感谢你!工作完美。