Finding characters with minimum frequency

Question:

As the title says, I am trying to print ALL characters with the minimum frequency:
least_occurring is holding only ONE value so I think that is the issue but can’t figure it out..it could be something obvious I am missing here but I am out of brain cells 🙂

 ex:  aabbccdddeeeffff

expected output:

Least occuring character :  a,b,c  <=== this is what I can't figure out :( 
repeated 2 time(s)

--------------------------
Character   Frequency
--------------------------
a                2
b                2
c                2
d                3
e                3
f                4

results I am getting:

Least occurring character is:  a
It is repeated 2 time(s)

--------------------------
Character   Frequency
--------------------------
 a                  2
 b                  2
 c                  2
 d                  3
 e                  3
 f                  4

my code:

# Get string from user
string = input("Enter some text: ")

# Set frequency as empty dictionary
frequency_dict = {}
tab="ttttt"
for character in string:
    if character in frequency_dict:
        frequency_dict[character] += 1
    else:
        frequency_dict[character] = 1

least_occurring = min(frequency_dict, key=frequency_dict.get)

# Displaying result
print("nLeast occuring character is: ", least_occurring)
print("Repeated %d time(s)" %(frequency_dict[least_occurring]))
# Displaying result
print("n--------------------------")
print("CharactertFrequency")
print("--------------------------")
for character, frequency in frequency_dict.items():
    print(f"{character + tab + str(frequency)}")

Asked By: mo1010

||

Answers:

You are very close!

If you have min value why not just iterate over your dictionary and check all keys that values are the min one?

for k, v in frequency_dict.items():
    if v == least_occurring:
        print(k)
Answered By: kosciej16

The Counter class from the collections module is ideal for this. However, in this trivial case, just use a dictionary.

s = 'aabbccdddeeeffff'

counter = {}
# count the occurrences of the individual characters
for c in s:
    counter[c] = counter.get(c, 0) + 1
# find the lowest value 
min_ = min(counter.values())
# create a list of all characters where the count matches the previously calculated minimum 
lmin = [k for k, v in counter.items() if v == min_]
# print the results
print('Least occuring character : ', end='')
print(*lmin, sep=', ')

Output:

Least occuring character : a, b, c
Answered By: Stuart
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.