docs: def mk_pools(things, keyfnc=lambda x: x):
      "Indexes a thing by the keyfnc to construct pools of things."
      pools = {}
      sthings = sorted(things, key=keyfnc)
      for key, thingz in groupby(sthings, key=keyfnc):
          pools.setdefault(key, []).extend(list(thingz))
      return pools