2017-06-26 7 views
0

Lassen Sie uns sagen, dass ich eine Liste von Tupeln haben zur Zeit durch das erste Element sortiert:Liste von Tupeln zur Liste Liste von Tupeln

tuple_list = [(1, "hello", "apple"), (1, "no", "orange"), 
    (2, "bye", "grape"), (3, "okay", "banana"), 
    (4, "how are you?", "raisin"), (4, "I'm doing well", "watermelon")] 

Ich möchte diese Liste von Tupeln in eine Liste von Liste von Tupeln drehen basiert auf dem ersten Element jedes Tupels.

Zum Beispiel:

new_tuple_list = [[(1, "hello", "apple"), (1, "no", "orange")], 
    [(2, "bye", "grape")], [(3, "okay", "banana")], 
    [(4, "how are you?", "raisin"), (4, "I'm doing well", "watermelon")]] 

Antwort

2

Verwenden itertools.groupby gruppieren Elemente basierend auf den ganzen Zahlen:

from itertools import groupby 

lst = [list(g)for _, g in groupby(tuple_list, lambda x: x[0])] 
print(lst) 

[[(1, 'hello', 'apple'), (1, 'no', 'orange')], 
[(2, 'bye', 'grape')], 
[(3, 'okay', 'banana')], 
[(4, 'how are you?raisin'), (4, "I'm doing well", 'watermelon')]] 
2

Sie können itertools.groupby für diesen Einsatz:

[list(x) for k, x in itertools.groupby(tuple_list, operator.itemgetter(0))]