¿Cómo puedo obtener una selección aleatoria ponderada de la clase Counter de Python?

Tengo un programa en el que hago un seguimiento del éxito de variascosa utilizandocollections.Counter - cada éxito de unacos incrementa el contador correspondiente:

import collections
scoreboard = collections.Counter()

if test(thing):
    scoreboard[thing]+ = 1

Entonces, para futuras pruebas, quiero sesgarme haciacosa que han generado el mayor éxito. @Counter.elements() parecía ideal para esto, ya que devuelve los elementos (en orden arbitrario) repetidos varias veces igual al recuento. Entonces pensé que podía hacer:

import random
nextthing=random.choice(scoreboard.elements())

Pero no, eso aumentaTypeError: el objeto de tipo 'itertools.chain' no tiene len (). Bueno entoncesrandom.choice no puede trabajar con iteradores. Pero, en este caso, la longitud es conocida (o conocible): essum(scoreboard.values()).

Conozco el algoritmo básico para iterar a través de una lista de longitud desconocida y elegir un elemento al azar, pero sospecho que hay algo más elegante. ¿Qué debería estar haciendo aquí?

Respuestas a la pregunta(12)

Su respuesta a la pregunta