我是这个网站的新手,我有一个问题,我需要一些帮助。我试图找到字典中的最高整数值和相应的键,然后检查是否有其他键具有相同的值。如果有重复值我想随机选择其中一个并返回它。截至目前,代码可以在字典中找到最高值并返回密钥,但每次都返回相同的密钥。我无法检查具有相同值的其他键。
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
答案 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])])
然后只需获取组列表中的第一个列表。