Dec-07-2018, 10:07 AM
Buran's idea is very good. Here is a variation with some abstraction
#!/usr/bin/python3 from collections import OrderedDict db = \ { "/data/Music/Daft Punk/Tron_ Legacy (Cd1)/1-17 Disc Wars.mp3": { "duration": "00:04:11", "artist": "Daft Punk", "album": "Tron: Legacy (Cd1)", "track": "17", "title": "Disc Wars" }, "/data/Music/Keith Kouna/Les ann\u00e9es monsieur/07 - Godichons.mp3": { "duration": "00:05:09", "artist": "Keith Kouna", "album": "Les ann\u00e9es monsieur", "track": "7", "title": "Godichons" }, "/data/Music/Daft Punk/Tron_ Legacy (Cd1)/1-07 Rinzler.mp3": { "duration": "00:02:17", "artist": "Daft Punk", "album": "Tron: Legacy (Cd1)", "track": "07", "title": "Rinzler" }, "/data/Music/Keith Kouna/Les ann\u00e9es monsieur/10 - Le Tape.mp3": { "duration": "00:06:06", "artist": "Keith Kouna", "album": "Les ann\u00e9es monsieur", "track": "10", "title": "Le Tape" }, "/data/Music/Keith Kouna/Les ann\u00e9es monsieur/09 - L'or.mp3": { "duration": "00:05:05", "artist": "Keith Kouna", "album": "Les ann\u00e9es monsieur", "track": "9", "title": "L'or" } } from functools import wraps def dbsorter(func): @wraps(func) def wrapper(db, reverse=False): return OrderedDict(sorted( db.items(), reverse=bool(reverse), key=lambda item: func(*item))) return wrapper @dbsorter def by_artist_and_track(key, data): return data['artist'], int(data['track']) sdb = by_artist_and_track(db) for key in sdb: print(key) print() @dbsorter def by_duration(key, data): h, m, s = (int(x) for x in data['duration'].split(':')) return (h, m, s) sdb = by_duration(db, reverse=True) for key in sdb: print(key)
Output:/data/Music/Daft Punk/Tron_ Legacy (Cd1)/1-07 Rinzler.mp3
/data/Music/Daft Punk/Tron_ Legacy (Cd1)/1-17 Disc Wars.mp3
/data/Music/Keith Kouna/Les années monsieur/07 - Godichons.mp3
/data/Music/Keith Kouna/Les années monsieur/09 - L'or.mp3
/data/Music/Keith Kouna/Les années monsieur/10 - Le Tape.mp3
/data/Music/Keith Kouna/Les années monsieur/10 - Le Tape.mp3
/data/Music/Keith Kouna/Les années monsieur/07 - Godichons.mp3
/data/Music/Keith Kouna/Les années monsieur/09 - L'or.mp3
/data/Music/Daft Punk/Tron_ Legacy (Cd1)/1-17 Disc Wars.mp3
/data/Music/Daft Punk/Tron_ Legacy (Cd1)/1-07 Rinzler.mp3