How to get all the keys with the same highest valu

2019-01-19 03:25发布

问题:

If I have a dictionary with their corresponding frequency values:

numbers = {a: 1, b: 4, c: 1, d: 3, e: 3}

To find the highest, what I know is:

mode = max(numbers, key=numbers.get)
print mode

and that prints:

b

But if I have:

numbers = {a: 1, b: 0, c: 1, d: 3, e: 3}

and apply the 'max' function above, the output is:

d

What I need is:

d,e

Or something similar, displaying both keys.

回答1:

numbers = {'a': 1, 'b': 0, 'c': 1, 'd': 3, 'e': 3}

[k for k,v in numbers.iteritems() if v == max(numbers.values())]

prints

 ['e', 'd']

what it does is, loop over all entries via .iteritems and then check if the value is the maximum and if so add the key to a list.



回答2:

numbers = {'a': 1, 'b': 4, 'c': 1, 'd':4 , 'e': 3}
mx_tuple = max(numbers.items(),key = lambda x:x[1]) #max function will return a (key,value) tuple of the maximum value from the dictionary
max_list =[i[0] for i in numbers.items() if i[1]==mx_tuple[1]] #my_tuple[1] indicates maximum dictionary items value

print(max_list)

This code will work in O(n). O(n) in finding maximum value and O(n) in the list comprehension. So overall it will remain O(n).

Note : O(2n) is equivalent to O(n).