# -*- coding: utf-8 -*- """ Created on Tue Apr 12 14:38:28 2016
@author: Kirby Urner, 4Dsolutions.net Tips and Tricks: Note use of **self.__dict__ in the __repr__, and print(*sorted(L)). Also, remember sep= and end= are overridable keyword args to print(). Related: data-only objects http://stackoverflow.com/questions/19988043/are-data-only-objects-ok-in-an-oop-design See also: Data Transfer Object, Passive Data Object, Bunch Class E.g.: http://pydanny.blogspot.com/2011/11/loving-bunch-class.html """ from collections import namedtuple # first, with an ordinary class (not quite a 'Bunch class', but could be) class Element: def __init__(self, dim0, dim1, dim2, dim3): self.axis0 = dim0 self.axis1 = dim1 self.axis2 = dim2 self.axis3 = dim3 def __repr__(self): return 'Element({axis0},{axis1},{axis2},{axis3})'.\ format(**self.__dict__) the_list = [Element('A', 'D', 0, 1), # goal: to sort on different axes Element('X', 'R', 2, 3), Element('R', 'B', 9, 8)] # sort on any attribute of Element print(sorted(the_list, key=lambda elem: elem.axis0)) # lambda extracts the key print(sorted(the_list, key=lambda elem: elem.axis1)) print(sorted(the_list, key=lambda elem: elem.axis2)) print(sorted(the_list, key=lambda elem: elem.axis3)) # one might use a named tuple to the same end Elem = namedtuple("Elem", "axis0 axis1 axis2, axis3") the_list = [Elem('A', 'D', 0, 1), Elem('X', 'R', 2, 3), Elem('R', 'B', 9, 8)] # almost identical syntax but line-wrapping added because namedtuple __repr__ # is more verbose... print("+++") print(*sorted(the_list, key=lambda elem: elem.axis0), sep="\n", end="\n--\n") print(*sorted(the_list, key=lambda elem: elem.axis1), sep="\n", end="\n--\n") print(*sorted(the_list, key=lambda elem: elem.axis2), sep="\n", end="\n--\n") print(*sorted(the_list, key=lambda elem: elem.axis3), sep="\n", end="\n--\n") expected_output = \ """ OUTPUT: [Element(A,D,0,1), Element(R,B,9,8), Element(X,R,2,3)] [Element(R,B,9,8), Element(A,D,0,1), Element(X,R,2,3)] [Element(A,D,0,1), Element(X,R,2,3), Element(R,B,9,8)] [Element(A,D,0,1), Element(X,R,2,3), Element(R,B,9,8)] +++ Elem(axis0='A', axis1='D', axis2=0, axis3=1) Elem(axis0='R', axis1='B', axis2=9, axis3=8) Elem(axis0='X', axis1='R', axis2=2, axis3=3) -- Elem(axis0='R', axis1='B', axis2=9, axis3=8) Elem(axis0='A', axis1='D', axis2=0, axis3=1) Elem(axis0='X', axis1='R', axis2=2, axis3=3) -- Elem(axis0='A', axis1='D', axis2=0, axis3=1) Elem(axis0='X', axis1='R', axis2=2, axis3=3) Elem(axis0='R', axis1='B', axis2=9, axis3=8) -- Elem(axis0='A', axis1='D', axis2=0, axis3=1) Elem(axis0='X', axis1='R', axis2=2, axis3=3) Elem(axis0='R', axis1='B', axis2=9, axis3=8) """
_______________________________________________ Edu-sig mailing list Edu-sig@python.org https://mail.python.org/mailman/listinfo/edu-sig