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

时间:2014-03-01 20:32:36

标签: python dictionary key

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

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

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分:1)

你可以这样写:

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

答案 2 :(得分:0)

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

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