code: def types_and_weights_of_connections(self):
          
          def get_label(u, v):
              u_label = self.structure[u].species_string
              v_label = self.structure[v].species_string
              return "-".join(sorted((u_label, v_label)))
  
          types = defaultdict(list)
          for u, v, d in self.graph.edges(data=True):
              label = get_label(u, v)
              types[label].append(d['weight'])
  
          return dict(types)
docs: Extract a dictionary summarizing the types and weights
          of edges in the graph.
  
          :return: A dictionary with keys specifying the
          species involved in a connection in alphabetical order
          (e.g. string 'Fe-O') and values which are a list of
          weights for those connections (e.g. bond lengths).