def __setitem__(self, i, v): if isinstance(i, str): r = [(ii, x) for ii, x in enumerate(self) if x.get('name', None) == i] if len(r) > 1: raise KeyError("There are {} elements named {}.".format( len(r), i)) elif len(r) == 0: self.append(v) else: CommentedSeq.__setitem__(self, r[0][0], v) else: CommentedSeq.__setitem__(self, i, v)