Skip to content

Instantly share code, notes, and snippets.

@shaunlebron
Created October 31, 2012 17:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shaunlebron/3988350 to your computer and use it in GitHub Desktop.
Save shaunlebron/3988350 to your computer and use it in GitHub Desktop.
How readable is this?
entries = getListOfTableEntriesSomeWhere()
entryTree = MyTree(entries)
################################
def group_entries(groupclass, entries, keyfunc):
return [groupclass(k,g) for k,g in itertools.groupby(entries,keyfunc)]
key_sys = lambda x: x.sys
key_subsys = lambda x: x.subsys
key_var = lambda x: x.var
key_all = lambda x: (x.sys, x.subsys, x.var)
class MyTree:
def __init__(self, entries):
self.entries = sorted(entries, key=key_all)
self.name = name
self.systems = group_entries(MySys, self.entries, key_sys)
class MySys:
def __init__(self, name, entries):
self.name = name
self.subsystems = group_entries(MySubsys, entries, key_subsys)
class MySubsys:
def __init__(self, name, entries):
self.name = name
self.variables = group_entries(MyVar, entries, key_var)
class MyVar:
def __init__(self, name, entries):
self.name = name
self.entries = list(entries)
@driax
Copy link

driax commented Oct 31, 2012

Using map at least provides a better idea of what's going on:

entries = getListOfTableEntriesSomeWhere()
entryTree = MyTree(entries)

################################

key_sys    = lambda x: x.sys
key_subsys = lambda x: x.subsys
key_var    = lambda x: x.var
key_all    = lambda x: (x.sys, x.subsys, x.var)

class MyTree:
    def __init__(self, entries):
        self.entries = sorted(entries, key=key_all)
        self.name = name
        self.systems = map(MySys, itertools.groupby(self.entries, key_sys))

class MySys:
    def __init__(self, name, entries):
        self.name = name
        self.subsystems = map(MySubsys,  itertools.groupby(entries, key_subsys))

class MySubsys:
    def __init__(self, name, entries):
        self.name = name
        self.variables = map(MyVar, itertools.groupby(entries, key_var))

class MyVar:
    def __init__(self, name, entries):
        self.name = name
        self.entries = list(entries)

@shaunlebron
Copy link
Author

Yeah, I like that better actually. Got rid of the indirection. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment