code: def find_transported_elements(rxn):
      
      element_dist = defaultdict()
      # Collecting elements for each metabolite.
      for met in rxn.metabolites:
          if met.compartment not in element_dist:
              # Multiplication by the metabolite stoichiometry.
              element_dist[met.compartment] = \
                  {k: v * rxn.metabolites[met]
                   for (k, v) in iteritems(met.elements)}
          else:
              x = {k: v * rxn.metabolites[met] for (k, v) in
                   iteritems(met.elements)}
              y = element_dist[met.compartment]
              element_dist[met.compartment] = \
                  {k: x.get(k, 0) + y.get(k, 0) for k in set(x) | set(y)}
      delta_dict = defaultdict()
      # Simplification of the resulting dictionary of dictionaries.
      for elements in itervalues(element_dist):
          delta_dict.update(elements)
      # Only non-zero values get included in the returned delta-dict.
      delta_dict = {k: abs(v) for (k, v) in iteritems(delta_dict) if v != 0}
      return delta_dict
docs: Return a dictionary showing the amount of transported elements of a rxn.
  
      Collects the elements for each metabolite participating in a reaction,
      multiplies the amount by the metabolite's stoichiometry in the reaction and
      bins the result according to the compartment that metabolite is in. This
      produces a dictionary of dictionaries such as this
      ``{'p': {'C': -1, 'H': -4}, c: {'C': 1, 'H': 4}}`` which shows the
      transported entities. This dictionary is then simplified to only include
      the non-zero elements of one single compartment i.e. showing the precise
      elements that are transported.
  
      Parameters
      ----------
      rxn : cobra.Reaction
          Any cobra.Reaction containing metabolites.