Trouver le plus populaire des mots dans une liste

J'ai une liste de mots:

words = ['all', 'awesome', 'all', 'yeah', 'bye', 'all', 'yeah']

Et je veux obtenir une liste de tuples:

[(3, 'all'), (2, 'yeah'), (1, 'bye'), (1, 'awesome')]

où chaque tuple est...

(number_of_occurrences, word)

La liste doit être triée par le nombre d'occurrences.

Ce que j'ai fait jusqu'à présent:

def popularWords(words):
    dic = {}
    for word in words:
        dic.setdefault(word, 0)
        dic[word] += 1
    wordsList = [(dic.get(w), w) for w in dic]
    wordsList.sort(reverse = True)
    return wordsList

La question est...

Est-il Pythonic, élégant et efficace?
Êtes-vous capable de faire mieux?
Merci à l'avance.

OriginalL'auteur Maciej Ziarko | 2011-03-08