Sortera dict med värde i python

Permalänk
Medlem

Sortera dict med värde i python

Hej,

Jag skulle vilja veta hur man sorterar en dict med olika kategori värde för att få det i ordningen "Values" nedan? Det ska sorteras enligt ordningen i "Categories".

Categories: {'Group 1', 'Cars', 'Models'} Values: {'Test 1': 'Group 1', 'Test 2': 'Group 1', 'Bmw': 'Cars', 'Mercedes': 'Cars', '330D': 'Models', 'C3': 'Models'}

Permalänk
Medlem
Skrivet av M89:

Hej,

Jag skulle vilja veta hur man sorterar en dict med olika kategori värde för att få det i ordningen "Values" nedan? Det ska sorteras enligt ordningen i "Categories".

Categories: {'Group 1', 'Cars', 'Models'} Values: {'Test 1': 'Group 1', 'Test 2': 'Group 1', 'Bmw': 'Cars', 'Mercedes': 'Cars', '330D': 'Models', 'C3': 'Models'}

Något i stil med detta borde fungera:

values = {'Test 1': 'Group 1', 'Test 2': 'Group 1', 'Bmw': 'Cars', 'Mercedes': 'Cars', '330D': 'Models', 'C3': 'Models'} categories = ['Group 1', 'Cars', 'Models'] sortedvalues = dict(sorted(values.items(), key=lambda x: categories.index(x[1])))

just key-argumentet till sorted är väl själva grejen att fokusera på, det definierar vad det är som elementen ska sorteras på

Permalänk
Medlem
Skrivet av evil penguin:

Något i stil med detta borde fungera:

values = {'Test 1': 'Group 1', 'Test 2': 'Group 1', 'Bmw': 'Cars', 'Mercedes': 'Cars', '330D': 'Models', 'C3': 'Models'} categories = ['Group 1', 'Cars', 'Models'] sortedvalues = dict(sorted(values.items(), key=lambda x: categories.index(x[1])))

just key-argumentet till sorted är väl själva grejen att fokusera på, det definierar vad det är som elementen ska sorteras på

Jag missade skriva att categories är ett set().

Error Contents: 'set' object has no attribute 'index'

Permalänk
Medlem
Skrivet av M89:

Jag missade skriva att categories är ett set().

Error Contents: 'set' object has no attribute 'index'

Det är dock en synnerligen olämplig datatyp om categories ska representera ordningen du vill ha?
(En mängd (set på engelska) har ingen definierad ordning, det säger bara vilka element som finns)

Permalänk
Medlem
Skrivet av evil penguin:

Det är dock en synnerligen olämplig datatyp om categories ska representera ordningen du vill ha?
(En mängd (set på engelska) har ingen definierad ordning, det säger bara vilka element som finns)

Jag misstänkte det så jag gjorde om det till en lista, men den sorterar inte i ordningen man väljer. :/

Edit:

Jag har nog hittat orsaken, återkommer.

Edit2:

Allt fungerar tack!

Permalänk
Medlem

För de som undrar så ser den slutgiltiga koden ut så här:

categories = list() values = dict(self.database.getCategoryMap()) current_categories = list(self.database.getAllCategories()) for category in range(len(current_categories)): res = xbmcgui.Dialog().select('Categories', current_categories) if res > -1: cat = current_categories[res] categories.append(cat) current_categories.pop(res) sortedvalues = dict(sorted(values.items(), key=lambda x: categories.index(x[1])))

Stort tack @evil penguin!

Permalänk
Medlem

Hur ofta kommer man linjärsöka sig igenom categories? Kan du göra sorteringen effektivare?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Hur ofta kommer man linjärsöka sig igenom categories? Kan du göra sorteringen effektivare?

Tja, bra fråga dock fungerar det för ändamålet då det inte rör sig om några stora mängder data för just det jag ska använda det till.