Seite 1 von 1

dict list summierung

Verfasst: Montag 12. September 2011, 10:34
von mit
Hi
Ich versuche alle Elemente von jedem Array aufzusummieren, aber leider funktioniert der folgende code nicht:

Code: Alles auswählen

>>> a = {1: [1, 2, 3], 2: [3, 2]} 
{1: [1, 2, 3], 2: [3, 2]}
>>> [sum(i) for i in a.values()] 
[6, 5]
Wie ist es möglich als Ergebnis 5 (3 + 2) zubekommen, anstatt [6, 5]?

Vielen Dank im voraus.

Re: dict list summierung

Verfasst: Montag 12. September 2011, 10:38
von Hyperion
Man nennt diese Dinger (die Keys in Deinem Dictionary) in Python Listen, nicht Arrays ;-)

Zu Deiner Frage:

Code: Alles auswählen

In [4]: sum(a[2])
Out[4]: 5

Re: dict list summierung

Verfasst: Montag 12. September 2011, 10:41
von björn
Er berechnet doch richtig die Summen der einzelnen Arrays!
1: 1+2+3 = 6
2: 2+3 = 5
Und daraus generiert er dir Das Array [6,5]

Ich verstehe glaube ich dein Problem nicht so richtig!

Gruß
Björn

Re: dict list summierung

Verfasst: Montag 12. September 2011, 12:42
von mit

Code: Alles auswählen

>>> a = {1: [1, 2, 3], 2: [3, 2], 3: [1]} 
Dict hat 3 Keys und 3 Listen. Ich versuche von jeder Liste die Anzahl zu bestimmen und diese dann zu summieren wie folgt:

Code: Alles auswählen

6 = {1: len([1, 2, 3]), 2: len([3, 2]), 3: len([1])} = 3 + 2 +1

Re: dict list summierung

Verfasst: Montag 12. September 2011, 12:49
von jbs
Wie würdest du denn vorgehen? Schreibe doch erst einmal eine normale for-Schleife. Und überlege was du tun musst. Wenn das klappt, dann versuchs mit einer LC.

Tip: benutze `len` und `sum`.

Re: dict list summierung

Verfasst: Montag 12. September 2011, 13:17
von Hyperion
mit hat geschrieben: Dict hat 3 Keys und 3 Listen. Ich versuche von jeder Liste die Anzahl zu bestimmen und diese dann zu summieren wie folgt:
Also willst Du nicht über die Elemente summieren sondern über die Anzahl! Das hättest Du auch schon im ersten Posting schreiben können; erschwerend für eine direkt richtige Deutung für uns ist noch, dass Du ein unglückliches Beispiel gewählt hattest (in dem nämlich 2 und 3 als Elemente vorkommen).

Ergänzend zu jbs:
Ich würde mir mal die Methode `values()` eines Dictionaries angucken (später ggf. auch `itervalues()`). Wenn Du das nicht mit einer Schleife machen willst, kannst Du Dir dann noch `map` (bzw. `imap` aus dem `itertools`-Modul) angucken. Aber zunächst sollte man das wohl erst einmal in einer Schleife lösen.

Re: dict list summierung

Verfasst: Montag 12. September 2011, 23:34
von mit
Danke fuer die tipps.

Loesung: sum([len(i) for i in a.values()])

Re: dict list summierung

Verfasst: Dienstag 13. September 2011, 00:00
von Hyperion
Du könntest auch einen Generatorausdruck verwenden; das sollte speicherschonender sein:

Code: Alles auswählen

In [65]: sum((len(i) for i in a.values()))
Out[65]: 6
Ich hatte mir diese funktionale Lösung ausgedacht:

Code: Alles auswählen

In [68]: from itertools import imap

In [69]: sum(imap(len, a.itervalues()))
Out[69]: 6

Re: dict list summierung

Verfasst: Dienstag 13. September 2011, 09:26
von lunar
@Hyperion: Die inneren Klammern im Generatorausdruck sind überflüssig.