使用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])])
然后,只需获取组列表中的第一个列表 非常感谢你!工作完美。