einen Wörterbuch aus einer Liste von Worten generieren möchte, Liste Gruppierung Gegenstände durch den Wert eines Schlüssels, wie zum Beispiel:Python: Gruppenlistenelemente in einem dict
input_list = [
{'a':'tata', 'b': 'foo'},
{'a':'pipo', 'b': 'titi'},
{'a':'pipo', 'b': 'toto'},
{'a':'tata', 'b': 'bar'}
]
output_dict = {
'pipo': [
{'a': 'pipo', 'b': 'titi'},
{'a': 'pipo', 'b': 'toto'}
],
'tata': [
{'a': 'tata', 'b': 'foo'},
{'a': 'tata', 'b': 'bar'}
]
}
Bisher habe ich zwei gefunden Wege, dies zu tun. Das erste einfach iteriert über die Liste erstellen Sublisten im dict für jeden Schlüsselwert und fügen Sie Elemente, die diese Schlüssel zum sublist passend:
l = [
{'a':'tata', 'b': 'foo'},
{'a':'pipo', 'b': 'titi'},
{'a':'pipo', 'b': 'toto'},
{'a':'tata', 'b': 'bar'}
]
res = {}
for e in l:
res[e['a']] = res.get(e['a'], [])
res[e['a']].append(e)
und gleichzeitig einen anderen itertools.groupby
:
import itertools
from operator import itemgetter
l = [
{'a':'tata', 'b': 'foo'},
{'a':'pipo', 'b': 'titi'},
{'a':'pipo', 'b': 'toto'},
{'a':'tata', 'b': 'bar'}
]
l = sorted(l, key=itemgetter('a'))
res = dict((k, list(g)) for k, g in itertools.groupby(l, key=itemgetter('a')))
Ich frage mich, welche alternative ist das effizienteste?
Gibt es einen pythisch/prägnanten oder besseren Weg, dies zu erreichen?
von "best", meinen Sie Leistung/Komplexität-weise? –
(und ja, es ist richtig, dass ich "meine Eingangsliste mit dem Wert der 'a' Taste der Listenelemente gruppieren möchte" - 'groupby' schien die beste Option zu sein, jedoch befürchtete ich die obligatorische Sortierung vorher fügen Sie eine unnötige Komplexität im Vergleich zu einer einfachen For-Schleife hinzu. –
"Beste" bezieht sich auf die Komplexität, ja. – Bernhard