Seite 1 von 1

Sortieren anhand von Liste

Verfasst: Mittwoch 16. Februar 2011, 12:21
von nemomuk
Hallo,

gibt es für so etwas hier auch etwas vorgefertigtes? (die Elemente einer Liste sollen gemäß der Reihenfolge einer anderen Liste sortiert werden)

Code: Alles auswählen

# coding: utf-8

a = [
    'motorway',
    'motorway_link',
    'trunk',
    'trunk_link',
    'primary',
    'primary_link',
    'secondary',
    'secondary_link',
    'tertiary',
    'unclassified',
    'road',
    'residential',
    'living_street',
    'service',
    'track',
    'pedestrian',
    'raceway',
    'services',
    'bus_guideway',
    'path',
    'cycleway',
    'footway',
    'bridleway',
    'steps',
    'river',
    'stream',
]

def sort_list_cmp(sort_list):
    def sort(x, y):
        return sort_list.index(x) - sort_list.index(y)
    return sort

l = ['motorway', 'path', 'trunk', 'river', 'motorway_link', 'track']
print sorted(l, cmp=sort_list_cmp(a))
Vielen Dank im voraus!

Re: Sortieren anhand von Liste

Verfasst: Mittwoch 16. Februar 2011, 12:34
von numerix

Code: Alles auswählen

print sorted(l,key=a.index)

Re: Sortieren anhand von Liste

Verfasst: Mittwoch 16. Februar 2011, 13:20
von nemomuk
Danke, ich hatte allerdings vergessen zu erwähnen, dass ich das key-Argument anderweitig benötige...

Code: Alles auswählen

# coding: utf-8
from operator import attrgetter

a = [
    'motorway',
    'motorway_link',
    'trunk',
    'trunk_link',
    'primary',
    'primary_link',
    'secondary',
    'secondary_link',
    'tertiary',
    'unclassified',
    'road',
    'residential',
    'living_street',
    'service',
    'track',
    'pedestrian',
    'raceway',
    'services',
    'bus_guideway',
    'path',
    'cycleway',
    'footway',
    'bridleway',
    'steps',
    'river',
    'stream',
]

class Test(object):
    
    def __init__(self, name):
        self.name = name
        
    def __repr__(self):
        return self.name

def sort_list_cmp(sort_list):
    def sort(x, y):
        return sort_list.index(x) - sort_list.index(y)
    return sort

l = [Test('motorway'), Test('path'), Test('trunk'), Test('river'), Test('motorway_link'), Test('track')]
print sorted(l, cmp=sort_list_cmp(a), key=attrgetter('name'))

Re: Sortieren anhand von Liste

Verfasst: Mittwoch 16. Februar 2011, 13:52
von nemomuk

Code: Alles auswählen

print sorted(l, key=lambda x: a.index(x.name))