In [5]: sorted(unsorted_list, key=presorted_list.index)
Out[5]: ['2C', '2D', '3D', '4D']
o, per migliorare le prestazioni (in particolare quando len(presorted_list)
è grande),
In [6]: order = {item:i for i, item in enumerate(presorted_list)}
In [7]: sorted(unsorted_list, key=order.__getitem__)
Out[7]: ['2C', '2D', '3D', '4D']
Per ulteriori informazioni su come ordinare utilizzando key
s, vedere l'eccellente Howto Sort wiki.
Se unsorted_list
contiene articoli (come '6D'
) non presorted_list
allora i metodi di cui sopra genera un errore. Devi prima decidere come vuoi ordinare questi elementi. Se li volete posti alla fine della lista, è possibile utilizzare
In [10]: unsorted_list = ['3D','2C','6D','4D','2D']
In [11]: sorted(unsorted_list, key=lambda x: order.get(x, float('inf')))
Out[11]: ['2C', '2D', '3D', '4D', '6D']
o se si desidera inserire tali elementi nella parte anteriore della lista, utilizzare
In [12]: sorted(unsorted_list, key=lambda x: order.get(x, -1))
Out[12]: ['6D', '2C', '2D', '3D', '4D']
Mi dispiace, ho Sono nuovo a questo, ma il primo bit di codice sembra darmi un errore di valore per il primissimo elemento nella lista non ordinata. ValoreErrore: '6D' non è nell'elenco –
'.index' genererà un errore di valore se l'elemento non è nell'elenco presorted. –
@Danica: Se vuoi elementi _removed_ che non sono in 'presorted_list', usa qualcosa come' sorted (itertools.ifilter (lambda x: x in presorted_list, unsorted_list), key = order .__ getitem __) '. – martineau