nodes: 0, module; 1, function_definition; 2, function_name:get_used_key_frames; 3, parameters; 4, block; 5, identifier:self; 6, expression_statement; 7, expression_statement; 8, comment:# each element in used_key_frames is a tuple (key_name, key_dict); 9, expression_statement; 10, for_statement; 11, return_statement; 12, comment:"""Returns a list of the keyframes used by this channel, sorted with
          time. Each element in the list is a tuple. The first element is the
          key_name and the second is the channel data at that keyframe."""; 13, assignment; 14, assignment; 15, identifier:kf; 16, identifier:skl; 17, block; 18, identifier:used_key_frames; 19, identifier:skl; 20, call; 21, identifier:used_key_frames; 22, list; 23, if_statement; 24, attribute; 25, argument_list; 26, comparison_operator:kf in self.dct['keys']; 27, block; 28, attribute; 29, identifier:sorted_key_list; 30, identifier:kf; 31, subscript; 32, expression_statement; 33, identifier:self; 34, identifier:key_frame_list; 35, attribute; 36, string; 37, call; 38, identifier:self; 39, identifier:dct; 40, string_content:keys; 41, attribute; 42, argument_list; 43, identifier:used_key_frames; 44, identifier:append; 45, tuple; 46, identifier:kf; 47, subscript; 48, subscript; 49, identifier:kf; 50, attribute; 51, string; 52, identifier:self; 53, identifier:dct; 54, string_content:keys
code: def get_used_key_frames(self):
          """Returns a list of the keyframes used by this channel, sorted with
          time. Each element in the list is a tuple. The first element is the
          key_name and the second is the channel data at that keyframe."""
  
          skl = self.key_frame_list.sorted_key_list()
          # each element in used_key_frames is a tuple (key_name, key_dict)
          used_key_frames = []
          for kf in skl:
              if kf in self.dct['keys']:
                  used_key_frames.append((kf, self.dct['keys'][kf]))
          return used_key_frames