7

让我们考虑 (key, value) 对的示例字典,如下所示:

 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 是最高的。我需要检索与其对应的一个或多个密钥。

有哪些可能的方法来完成这项工作?哪个是最有效的,为什么?

笔记:

  1. 键和/或值不符合字典的顺序。该程序不断向字典中添加新的(键,值)对。

  2. max(value) 可能有多个键

    a) 如果一个dict只有一个与max(value)对应的key,那么结果应该只是一个字符串(即Key)。示例:上面的 dict2 应该返回 'j'

    b) 如果一个 dict 有多个与 max(value) 对应的键,那么结果应该是字符串列表(即键)。示例:上面的 dict1 应该返回 ['j', 'g']

4

2 回答 2

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']
于 2013-05-15T15:59:37.263 回答
7

你可以做:

maxval = max(dict.iteritems(), key=operator.itemgetter(1))[1]
keys = [k for k,v in dict.items() if v==maxval]
于 2013-05-15T15:48:29.927 回答