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:
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
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:
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.