让我们考虑(键,值)对的样本字典如下:
dict1 = {'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28, 'g' : 90}
dict2 = {'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28}
在词典中的所有值中,90是最高的。我需要检索与其对应的一个或多个键。
有什么方法可以完成这项工作?哪个是最有效的,为什么?
注意:
键和/或值不符合字典的顺序。该程序不断向字典中添加新的(键,值)对。
max(value)
可能有多个键a)如果一个dict只有一个对应于max(value)的键,那么结果应该只是一个字符串(即Key)。示例:上面的dict2应该返回'j'
b)如果一个dict有多个对应于max(value)的键,那么结果应该是字符串列表(即键)。示例:上面的dict1应该返回['j','g']
答案 0 :(得分:8)
使用max()
和列表理解:
>>> dic = {'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28,"k":90}
>>> maxx = max(dic.values()) #finds the max value
>>> keys = [x for x,y in dic.items() if y ==maxx] #list of all
#keys whose value is equal to maxx
>>> keys
['k', 'j']
创建一个函数:
>>> def solve(dic):
maxx = max(dic.values())
keys = [x for x,y in dic.items() if y ==maxx]
return keys[0] if len(keys)==1 else keys
...
>>> solve({'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28})
'j'
>>> solve({'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28, 'g' : 90})
['g', 'j']
答案 1 :(得分:7)
你可以这样做:
maxval = max(dict.iteritems(), key=operator.itemgetter(1))[1]
keys = [k for k,v in dict.items() if v==maxval]