2016-03-25 21 views
0

Ich habe eine Liste 'l' von Tupeln. entsprechend den Werten aufsteigendAnordnen von Elementen einer Liste von Tupeln

l = [('apple',4), ('carrot',2), ('apple',1), ('carrot',7)] 

Ich möchte die ersten Elemente von Tupeln arrangieren.

Das erwartete Ergebnis ist:

result = [('apple', (1,4)), ('carrot', (2,7))] 

Ich habe versucht, wie:

for x in l: 
    variables = list(set(x[0])) 

Ich nehme an, dass es mehr besserer Weg, es zu tun. Irgendwelche Ideen bitte.

Antwort

1

Hier ist meine Lösung:

from collections import defaultdict 

l = [('apple',4), ('carrot',2), ('apple',1), ('carrot',7)] 

d = defaultdict(list) 
for i, j in l: 
    d[i].append(j) 

result = sorted([tuple([x, tuple(sorted(y))]) for x, y in d.items()]) 

print(result) 

Und hier ist das Ergebnis:

[('apple', (1, 4)), ('carrot', (2, 7))] 
3

Sie ein defaultdict verwenden könnten, um diese Werte zu sammeln und dann die Elemente aus dem Wörterbuch bekommen, um das gewünschte Ergebnis zu erhalten:

>>> l = [('apple',4), ('carrot',2), ('apple',1), ('carrot',7)] 
>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> for k, v in l: 
     d[k].append(v) 

>>> dict(d) 
{'carrot': [2, 7], 'apple': [4, 1]} 
>>> list(d.items()) 
[('carrot', [2, 7]), ('apple', [4, 1])] 

Um diese Sublisten dann zu sortieren, können Sie eine Liste Verständnis verwenden:

>>> [(k, tuple(sorted(v))) for k, v in d.items()] 
[('carrot', (2, 7)), ('apple', (1, 4))] 

Und wenn Sie möchten, dass durch den „Schlüssel“ auch sortieren, nur sortieren, die Liste resultierende list.sort() verwenden.

1

Hier ist ein Motto für Sie:

>>> a = [('apple',4), ('carrot',2), ('apple',1), ('carrot',7)] 
>>> sorted([(n, tuple(sorted([e[1] for e in a if e[0] == n]))) for n in set(e for e,f in a)]) 
[('apple', (1, 4)), ('carrot', (2, 7))] 

Diese sortiert sowohl das erste Element (apple, carrot, ...), und jedes zweite Element ((1,4) (2,7)).

Beachten Sie, dass @ Pokes Lösung es nicht sortiert.

Verwandte Themen