code: def countBy(self, val):
          
  
          def by(result, key, value):
              if key not in result:
                  result[key] = 0
              result[key] += 1
  
          res = self._group(self.obj, val, by)
  
          return self._wrap(res)
docs: Counts instances of an object that group by a certain criterion. Pass
          either a string attribute to count by, or a function that returns the
          criterion.