A. Vreeswijk
A. Vreeswijk

Reputation: 954

Python Get key of nested dictionary with highest value for attribute

I have a problem. In my code, I have the following dictionary:

{1: {'amount': 40.0, 'quantity': 0}, 2: {'amount': 40.0, 'quantity': 0}, 3: {'amount': 40.0, 'quantity': 0}, 4: {'amount': 40.0, 'quantity': 0}, 5: {'amount': 41, 'quantity': 0}, 6: {'amount': 40.0, 'quantity': 0}, 7: {'amount': 40.0, 'quantity': 0}, 8: {'amount': 40.0, 'quantity': 0}, 9: {'amount': 40.0, 'quantity': 0}, 10: {'amount': 40.0, 'quantity': 0}}

Out of this dictionary, I need to grab the key of the inner dictionary with the greatest amount. In my case, that should be 5. I found a lot about things like this, but nothing about nested dictionaries.

I came up with something like this:

max(int(i['amount']) for i in dict.values())

But this returns the highest amount. I need to return the key of that dictionary with that amount. How can I achieve what I want?

Upvotes: 2

Views: 758

Answers (2)

BrokenBenchmark
BrokenBenchmark

Reputation: 19252

You can find the maximum among the keys of your dictionary, comparing based on a custom key parameter that retrieves the amount corresponding to the key:

result = max(data.keys(), key=lambda x: data[x]['amount'])

print(result)

Upvotes: 6

vstack17
vstack17

Reputation: 86

Perhaps you could check if the value is equal to the max and then save the key, e.g.,:

[k for k, v in dict.items() if v == max(int(v['amount'])]

This will give you a list of all the keys with the max-value (if multiple share a max)-- so to just get one you could index the 0th element of it.

Upvotes: 2

Related Questions