Das ist eine sehr seltsame Art, Dinge zu organisieren. Wenn Sie in einem Wörterbuch gespeichert haben, ist dies einfach:
# 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
Dieser Code zum Aktualisieren eines Wörterbuchs der Zählungen ist ein allgemeines "Muster" in Python. Es ist so üblich, dass es eine spezielle Datenstruktur gibt defaultdict
, die erstellt wurde, um dies noch einfacher zu machen:
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
Wenn Sie defaultdict
mit einem Schlüssel auf das zugreifen und der Schlüssel noch nicht in der vorhanden ist defaultdict
, wird der Schlüssel automatisch mit einem Standardwert hinzugefügt. Das defaultdict
nimmt das von Ihnen übergebene Callable und ruft es auf, um den Standardwert zu erhalten. In diesem Fall haben wir in der Klasse bestanden int
; Wenn Python aufruft int()
, wird ein Nullwert zurückgegeben. Wenn Sie also zum ersten Mal auf eine URL verweisen, wird deren Anzahl auf Null initialisiert, und dann fügen Sie der Anzahl eine hinzu.
Ein Wörterbuch voller Zählungen ist jedoch auch ein gängiges Muster. Daher bietet Python eine gebrauchsfertige Klasse: containers.Counter
Sie erstellen einfach eine Counter
Instanz, indem Sie die Klasse aufrufen und eine beliebige iterierbare Klasse übergeben. Es wird ein Wörterbuch erstellt, in dem die Schlüssel Werte aus der Iterable sind und die Werte angeben, wie oft der Schlüssel in der Iterable angezeigt wurde. Das obige Beispiel wird dann:
from collections import Counter # available in Python 2.7 and newer
urls_d = Counter(list_of_urls)
Wenn Sie es wirklich so machen müssen, wie Sie es gezeigt haben, ist es am einfachsten und schnellsten, eines dieser drei Beispiele zu verwenden und dann das zu erstellen, das Sie benötigen.
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()]
Wenn Sie Python 2.7 oder höher verwenden, können Sie dies in einem Einzeiler tun:
from collections import Counter
urls = [{"url": key, "nbr": value} for key, value in Counter(list_of_urls).items()]