Tuto
Tuto

Reputation: 67

Dictionary rearrangement and sorting

Required of counting the number of different values appear in the dict books, and in accordance with the number of occurrences of value reverse output.

books = {
    123457889: 'A',
    252435234: 'A',
    434234341: 'B',
    534524365: 'C',
    354546589: 'D',
    146546547: 'D',
    353464543: 'F',
    586746547: 'E',
    511546547: 'F',
    546546647: 'F',
    541146127: 'F',
    246546127: 'A',
    434545127: 'B',
    533346127: 'E',
    544446127: 'F',
    546446127: 'G',
    155654627: 'G',
    546567627: 'G',
    145452437: 'H',
}

Output like this:

'F': 5,
'A': 3,
'G': 3,
'B': 2,
'D': 2,
'E': 2,
'C': 1,
'H': 1

I tried it:

import pprint

# to get the values from books
clist = [v for v in books.values()]

# values in books as keys in count,   
count = {}
for c in clist:
    count.setdefault(c, 0)
    count[c] += 1

pprint.pprint(count)

But dict couldn't sorting.

Upvotes: 2

Views: 75

Answers (1)

idjaw
idjaw

Reputation: 26570

Your code works fine. You can do this much easier using Counter from the collections module to do this for you. Simply pass books.values() in to Counter:

from collections import Counter
counts = Counter(books.values())
print(counts)

Output:

Counter({'F': 5, 'A': 3, 'G': 3, 'E': 2, 'D': 2, 'B': 2, 'H': 1, 'C': 1})

To provide the layout of the output you are expecting in order of value, you can perform a simple iteration using the most_common method and print each line:

for char, value in counts.most_common():
    print("'{}': {}".format(char, value))

Output:

'F': 5
'G': 3
'A': 3
'E': 2
'D': 2
'B': 2
'C': 1
'H': 1

Upvotes: 4

Related Questions