code: def parse_oxi_states(self, data):
          
          try:
              oxi_states = {
                  data["_atom_type_symbol"][i]:
                      str2float(data["_atom_type_oxidation_number"][i])
                  for i in range(len(data["_atom_type_symbol"]))}
              # attempt to strip oxidation state from _atom_type_symbol
              # in case the label does not contain an oxidation state
              for i, symbol in enumerate(data["_atom_type_symbol"]):
                  oxi_states[re.sub(r"\d?[\+,\-]?$", "", symbol)] = \
                      str2float(data["_atom_type_oxidation_number"][i])
  
          except (ValueError, KeyError):
              oxi_states = None
          return oxi_states
docs: Parse oxidation states from data dictionary