2016-10-25 12 views
-3

Angesichts der ListeListe Gruppe in Python Zum Wörterbuch

l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)] 

wie bekomme ich das Wörterbuch

{'a': [1, 1, 2], 'c': [5], 'b': [2, 3]} 

in Python?

Edit: Ich suchte nach einer funktionellen Lösung (mit nur 1 Ausdruck).

+2

ist es eine fast genaue Beispiel für das, was Sie wollen [hier] (https: // docs. python.org/3/library/collections.html#defaultdict-examples) –

+0

@DavidG Du hast Recht, lass es uns als Duplikat markieren. Ursprünglich suchte ich nach einer generischen One-Expression-Lösung für das Problem, aber ich habe dies nicht klargestellt und die nicht-funktionale Lösung ist einfacher. –

Antwort

2

Verwendung Sie können die collections.defaultdict() verwenden. Alternativ können Sie auch für den Fall nicht collections importieren möchten, können Sie das gleiche Verhalten bei normalen dict erreichen mit dict.setdefault() wie:

>>> my_dict = {} 
>>> l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)] 
>>> for k, v in l: 
...  my_dict.setdefault(k, []).append(v) 
... 
>>> my_dict 
{'a': [1, 1, 2], 'c': [5], 'b': [2, 3]} 
0

Nach

from itertools import * 

def group(iterable, key, value = lambda x: x): 
    return dict((k, list(map(value, values))) for k, values in groupby(sorted(iterable, key = key), key)) 

Verwendung group(l, key = lambda x: x[0], value = lambda x: x[1])) definieren.

0

Verwendung von defaultdict aus dem Sammlungsmodul. Sie können die Liste iterieren und die Paare (Schlüssel, Wert) aus den Tupeln in der Liste extrahieren und Ihr Wörterbuch erstellen.

from collections import defaultdict 

l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)] 

def dict_my_list(lst): 
    d = defaultdict(list) 
    for key, value in lst: 
     d[key].append(value) 
    return d 

print dict_my_list(l) # {'a': [1, 1, 2], 'c': [5], 'b': [2, 3]} 
0

Hier ist eine einfache Lösung für Ihr Problem dict()

l = [('a', 1), ('b', 2), ('a', 1), ('a', 2), ('c', 5), ('b', 3)] 
ll = dict() 
for key,value in l: 
    if key in ll: 
     ll[key].append(value) 
    else: 
     ll[key] = list() 
     ll[key].append(value) 

print ll # {'a': [1, 1, 2], 'c': [5], 'b': [2, 3]} 
Verwandte Themen