2017-06-19 5 views
-1

Ich habe eine Liste von Dateinamen. Ich muss sie basierend auf den Endnamen nach dem Unterstrich (_) gruppieren. Meine Liste sieht wie folgt aus:Sortieren einer Liste nach Namen in Python

[ 
    '1_result1.txt', 
    '2_result2.txt', 
    '3_result2.txt', 
    '4_result3.txt', 
    '5_result4.txt', 
    '6_result1.txt', 
    '7_result2.txt', 
    '8_result3.txt', 
] 

Mein Endergebnis sein sollte:

List1 = ['1_result1.txt', '6_result1.txt'] 

List2 = ['2_result2.txt', '3_result2.txt', '7_result2.txt'] 

List3 = ['4_result3.txt', '8_result3.txt'] 

List4 = ['5_result4.txt'] 

Antwort

2

Das wird kommen, ein Wörterbuch von Listen zu machen, dann die Eingabe laufen und das Hinzufügen jedes Element in seine richtige Liste :

output = {} 
for item in inlist: 
    output.setdefault(item.split("_")[1], []).append(item) 

print output.values() 

Wir setdefault verwenden, um sicherzustellen, dass für den Eintrag eine Liste gibt es, dann sind unsere aktuellen Dateinamen in die Liste aufzunehmen. output.values() gibt nur die Listen zurück, nicht das gesamte Wörterbuch, das scheinbar das ist, was Sie möchten.

+0

Note '' 'für Artikel in in''' geändert werden muss –

+0

Sie meinen' item.split ("_") [1] ', denke ich. –

+0

Danke! Behebt diese Probleme. –

0

Beginnend mit Python 2.4 haben sowohl list.sort() als auch sorted() einen Schlüsselparameter hinzugefügt, um eine Funktion anzugeben, die vor dem Vergleich auf jedem Listenelement aufgerufen wird.

Der Wert des Schlüsselparameters sollte eine Funktion sein, die ein einzelnes Argument akzeptiert und einen Schlüssel zurückgibt, der für Sortierzwecke verwendet wird. Diese Technik ist schnell, da die Schlüsselfunktion für jeden Eingabedatensatz genau einmal aufgerufen wird.

Also, wenn l der Name Ihrer Liste dann könnte man so etwas wie verwenden:

l.sort(key=lambda s: s.split('_')[1])

Mehr Informationen über Schlüsselfunktionen bei here

1

mit defaultdict von collections Modul:

from collections import defaultdict 

output = defaultdict(list) 
for file in data: 
    output[item.split("_")[1]].append(file) 

print output.values() 

mit groupby von itertools Modul:

data.sort(key=lambda x: x.split('_')[1]) 
for key, group in groupby(data, lambda x: x.split('_')[1]): 
    print list(group) 
+0

danke. Split-Option funktioniert – Patrik

+0

Wenn das Ihnen geholfen hat, bitte akzeptieren Sie es als die richtige Antwort – pramod

Verwandte Themen