it-swarm.com.de

Python zählt Elemente im Dikt-Wert, der eine Liste ist

Python 3.3, ein Wörterbuch mit Schlüsselwertpaaren in dieser Form. 

d = {'T1': ['eggs', 'bacon', 'sausage']}

Die Werte sind Listen mit variabler Länge, und ich muss die Listenelemente durchlaufen. Das funktioniert: 

count = 0
for l in d.values():
   for i in l: count += 1

Aber es ist hässlich. Es muss einen mehr pythonischen Weg geben, aber ich scheine es nicht zu finden.

len(d.values()) 

produziert 1. Es ist 1 Liste (DUH). Versuche mit Counter von here geben "unhashable type" -Fehler. 

11
RolfBly

Verwenden Sie sum() und die Längen der einzelnen Wörterbuchwerte:

count = sum(len(v) for v in d.itervalues())

Wenn Sie Python 3 verwenden, verwenden Sie einfach d.values().

Schnelle Demo mit Ihrer Eingabeprobe und einer von mir:

>>> d = {'T1': ['eggs', 'bacon', 'sausage']}
>>> sum(len(v) for v in d.itervalues())
3
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(len(v) for v in d.itervalues())
7

Eine Counter hilft Ihnen hier nicht viel, Sie erstellen keine Anzahl pro Eintrag, Sie berechnen die Gesamtlänge aller Ihrer Werte.

38
Martijn Pieters
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(map(len, d.values()))
7
9
John La Rooy

Ich machte meine Hausaufgaben bei Treehouse. Es kann zumindest um einen Schritt einfacher gemacht werden (ich kenne es), aber es ist für Anfänger (wie ich) vielleicht einfacher, diese Version zu verstehen.

dict = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['bread', 'butter', 'tosti']}

total = 0

for value in dict:
    value_list = dict[value]
    count = len(value_list)
    total += count

print(total)
0
Rik Schoonbeek

Ich suchte nach einer Antwort darauf, als ich dieses Thema fand, bis mir klar wurde, dass ich bereits etwas in meinem Code hatte, für das ich dieses verwenden konnte. Das ist was ich mir ausgedacht habe:

count = 0

for key, values in dictionary.items():
        count = len(values)

Wenn Sie die Anzahl für jedes Wörterbuchelement speichern möchten, können Sie ein neues Wörterbuch erstellen, um die Anzahl für jeden Schlüssel zu speichern.

count = {}

for key, values in dictionary.items():
        count[key] = len(values)

Ich konnte nicht genau herausfinden, von welcher Version diese Methode verfügbar ist, aber ich denke, die .items-Methode ist nur in Python 3 verfügbar.

0
Jeffrey