Hallo,
mal angenommen ich habe folgende Menge:
m[0].hash = "abc"
m[1].hash = "def"
m[2].hash = "abc"
m[3].hash = "abc"
m[4].hash = "def"
m[5].hash = "xyz"
Ich möchte diese nun gruppieren, so dass die jeweiligen Objekte (!) in getrennte Listen kommen. Es geht allein um den Wert im Attribut .hash . Der Rest ist unentscheidend.
Hat da jemand ne Idee, wie man das am cleversten löst?
Liebe Grüße
Chris
Menge nach Attributen gruppieren
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
Pack sie doch einfach ein ein Dictionary, das Listen enthält.
Grüße,
anogayales
Code: Alles auswählen
grp = {}
for element in m:
try:
grp[element.hash].append(element)
except KeyError:
grp[element.hash] = []
grp[element.hash].append(element)
anogayales
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das geht noch kuerzer:
Code: Alles auswählen
grp = {}
for element in m:
grp.setdefault(element.hash, []).append(element)
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Und es geht auch schöner, entweder mit "defaultdict" ...
... oder mit "itertools.groupby":
Code: Alles auswählen
from collections import defaultdict
grp = defaultdict(list)
for element in m:
grp[element.hash].append(element)
Code: Alles auswählen
from itertools import groupby
from operator import attrgetter
grp = {}
for key, items in itertools.groupby(m, attrgetter('hash')):
grp[key] = list(items)