Das ist eine sehr seltsame Art, Dinge zu organisieren. Wenn Sie in einem Wörterbuch gespeichert ist, 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 für ein Wörterbuch der Zählungen Aktualisierung ein gemeinsames „Muster“ in Python ist. Es ist so verbreitet, dass es eine spezielle Datenstruktur ist, defaultdict
, erstellt ihn nur 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 die defaultdict
mit einem Schlüssel zuzugreifen, und der Schlüssel ist nicht bereits in den defaultdict
, den Schlüssel wird automatisch mit einem Standardwert hinzugefügt. Die defaultdict
nimmt die Callable, die Sie übergeben haben, und ruft sie auf, um den Standardwert zu erhalten. In diesem Fall bestanden wir in Klasse int
; Wenn Python int()
aufruft, gibt es einen Nullwert zurück. Wenn Sie also zum ersten Mal auf eine URL verweisen, wird deren Anzahl auf Null initialisiert und Sie fügen dann eins zur Anzahl hinzu.
Aber ein Wörterbuch voller zählt ist auch ein gemeinsames Muster, so Python bietet eine ready-to-use-Klasse: containers.Counter
Sie erstellen nur eine Counter
Instanz durch die Klasse aufrufen, in jedem iterable vorbei; Es erstellt ein Dictionary, in dem die Schlüssel Werte aus dem iterablen Wert sind, und die Werte sind die Anzahl der Male, die der Schlüssel im iterablen Fall 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 tun müssen, um die Art und Weise Sie zeigten, ist die einfachste und schnellste Weg, eine dieser drei Beispiele zu verwenden wäre, und dann bauen die, die 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 verwenden 2.7 oder höher Sie können es in einem Einzeiler tun:
from collections import Counter
urls = [{"url": key, "nbr": value} for key, value in Counter(list_of_urls).items()]
Die Antworten sind sehr interessant, danke. – Natim