Yash Patel
Yash Patel

Reputation: 39

How to get the keys from value in python?

I'm trying to solve question. which gives following output:

>>> frequency([13,12,11,13,14,13,7,11,13,14,12,14,14])

ANSWER: ([7], [13, 14])

Basically it's returning list of HIGHEST and LOWEST frequency.

I'm using collection.Counter() function So I got this:

Counter({13: 4, 14: 4, 11: 2, 12: 2, 7: 1})

I extracted key and values and I also got my values sorted in one list. Now I want to get keys which are having least and highest values so that I can generate list from that.

I don't know how to do that.

Upvotes: 0

Views: 223

Answers (3)

Tom Wojcik
Tom Wojcik

Reputation: 6179

Not the most pythonic way, but easy to understand for the beginner.

from collections import Counter
L = [13,12,11,13,14,13,7,11,13,14,12,14,14]

answer_min = []
answer_max = []

d = Counter(L)
min_value = min(d.values())
max_value = max(d.values())

for k,v in d.items():

    if v == min_value:
        answer_min.append(k)
    if v == max_value:
        answer_max.append(k)

answer = (answer_min, answer_max)
answer

Gives us ([7], [13, 14]). It looks like you only needed to know about dictionary.items() to solve this.

Upvotes: 2

Ajax1234
Ajax1234

Reputation: 71451

You can try this:

import collections
s = [13,12,11,13,14,13,7,11,13,14,12,14,14]
count = collections.Counter(s)
mins = [a for a, b in count.items() if b == min(count.values())]
maxes = [a for a, b in count.items() if b == max(count.values())]
final_vals = [mins, maxes]

Output:

[[7], [13, 14]]

Upvotes: 0

Moses Koledoye
Moses Koledoye

Reputation: 78554

You can take the minimum and maximum values first, then build the list of keys at those values with list comprehensions:

c =  Counter({13: 4, 14: 4, 11: 2, 12: 2, 7: 1})
values = c.values()
mn, mx = min(values), max(values)
mins = [k for k, v in c.items() if v == mn]
maxs = [k for k, v in c.items() if v == mx]
print (mins, maxs)
# ([7], [13, 14])

Upvotes: 1

Related Questions