/ / Python-Wörterbuch hinzufügen in Wert / Optimierung - Python, Schleifen, Optimierung, Wörterbuch

Python-Wörterbuch hinzufügen in Wert / Optimierung - Python, Schleifen, Optimierung, Wörterbuch

Ich möchte die Nummer von tags in einem mehrdimensionalen Array. So mach ich es:

l["users"] sind meine Daten (Array)

tags = {}
for u in l["users"]:
for p in u["photos"]:
for t in p["tags"]:
if tags.get(t):
tags[t] +=1
else:
tags[t] = 1

Gibt es einen saubereren oder schnelleren Weg, diesen Code zu schreiben?

Antworten:

3 für die Antwort № 1

Wie wäre es mit dieser schnellen und pythonischen Ein-Liner-Lösung? Sammlungen.Zähler ():

Ein Counter ist eine Dict-Unterklasse zum Zählen von Hash-Objekten. Es ist ein ungeordnete Sammlung, in der Elemente als Wörterbuchschlüssel und gespeichert werden Ihre Zählungen werden als Wörterbuchwerte gespeichert.

Counter(t for u in l["users"] for p in u["photos"] for t in p["tags"])

DEMO:

from collections import Counter

l = {"users": [{"photos": [{"tags": [1,2,3,4,5]}, {"tags": [3,4,5]}]},
{"photos": [{"tags": [1]}, {"tags": [2,3,4,5]}]}]}

tags = Counter(t for u in l["users"] for p in u["photos"] for t in p["tags"])
print tags  # prints Counter({3: 3, 4: 3, 5: 3, 1: 2, 2: 2})

1 für die Antwort № 2

Benutze einen collections.defaultdict(int), die verwenden werden 0 als Standardwert für einen Schlüssel, der noch keinen Schlüssel hat:

import collections
tags = collections.defaultdict(int)
for u in l["users"]:
for p in u["photos"]:
for t in p["tags"]:
tags[t] +=1

Ebenfalls, if tags.get(t) ist ein schlechter Weg, um zu überprüfen, ob t ist ein Schlüssel in tagsDies gilt insbesondere, da es in einem Kontext fehlschlägt, in dem ein Wert in einem booleschen Kontext als falsch angesehen werden kann.

if t in tags:

0 für die Antwort № 3

Sammlungen. Zähler ist gut um Dinge zu zählen.