Was Sie sicherlich suchen, ist die Verwendung der Option key = für sorted(), die eine Funktion zur Verfügung stellt, die einen beliebigen Sortierschlüssel für jedes Element zurückgibt. Diese Funktion kann den Typ ihres Arguments prüfen und verschiedene Aktionen ausführen. Zum Beispiel:
import types
class obj(object):
def __init__(self, arg):
self.name = arg
def extract_name(obj):
if type(obj) is types.DictType:
return obj['name']
else:
return obj.__dict__['name']
d = { 'name': 'Jill'}
print sorted([obj('Jack'), d], key=extract_name)
Weitere Informationen finden Sie auf der Python wiki
RichieHindle Vorschlag der Verwendung von isinstance ist gut zu finden. Und während ich es war dachte ich, es wäre schön, beliebige Elementnamen zu unterstützen, anstatt zu ‚namen‘:
def extract_elem_v2(elem_name):
def key_extractor(obj):
dct = obj if isinstance(obj, dict) else obj.__dict__
return dct[elem_name]
return key_extractor
, die Sie mögen so verwenden können:
print sorted(list_of_stuff, key=extract_elem_v2('name'))
+1. Kleiner Vorschlag: 'isinstance (obj, dict)' wäre ordentlicher und würde Klassen erlauben, die von 'dict' abgeleitet sind. – RichieHindle
Sie haben Recht, Insinance ist eine bessere Wahl, nicht sicher, warum ich nicht daran gedacht habe. Aktualisierte Version an die Antwort angehängt. Vielen Dank! –
Vielen Dank Jack! Diese Antwort ist wunderschön. – hekevintran