Esa es una forma muy extraña de organizar las cosas. Si almacenó en un diccionario, esto es fácil:
# This example should work in any version of Python.
# urls_d will contain URL keys, with counts as values, like: {'http://www.google.fr/' : 1 }
urls_d = {}
for url in list_of_urls:
if not url in urls_d:
urls_d[url] = 1
else:
urls_d[url] += 1
Este código para actualizar un diccionario de conteos es un "patrón" común en Python. Es tan común que existe una estructura de datos especial defaultdict, creada solo para hacer esto aún más fácil:
from collections import defaultdict # available in Python 2.5 and newer
urls_d = defaultdict(int)
for url in list_of_urls:
urls_d[url] += 1
Si accede al defaultdictmediante una clave, y la clave aún no está en el defaultdict, la clave se agrega automáticamente con un valor predeterminado. El defaultdicttoma el invocable que le pasó y lo llama para obtener el valor predeterminado. En este caso, pasamos en clase int; cuando Python llama int(), devuelve un valor cero. Entonces, la primera vez que hace referencia a una URL, su recuento se inicializa en cero y luego agrega uno al recuento.
Pero un diccionario lleno de cuentas también es un patrón común, por lo que Python proporciona una clase lista para usar: containers.Counter simplemente crea una Counterinstancia llamando a la clase, pasando cualquier iterable; construye un diccionario donde las claves son valores del iterable, y los valores son recuentos de cuántas veces apareció la clave en el iterable. El ejemplo anterior se convierte entonces en:
from collections import Counter # available in Python 2.7 and newer
urls_d = Counter(list_of_urls)
Si realmente necesita hacerlo de la manera que mostró, la forma más fácil y rápida sería usar cualquiera de estos tres ejemplos y luego construir el que necesita.
from collections import defaultdict # available in Python 2.5 and newer
urls_d = defaultdict(int)
for url in list_of_urls:
urls_d[url] += 1
urls = [{"url": key, "nbr": value} for key, value in urls_d.items()]
Si está utilizando Python 2.7 o más reciente, puede hacerlo en una sola línea:
from collections import Counter
urls = [{"url": key, "nbr": value} for key, value in Counter(list_of_urls).items()]