code: def setlist(self, key, values):
          
          if not values and key in self:
              self.pop(key)
          else:
              it = zip_longest(
                  list(self._map.get(key, [])), values, fillvalue=_absent)
              for node, value in it:
                  if node is not _absent and value is not _absent:
                      node.value = value
                  elif node is _absent:
                      self.add(key, value)
                  elif value is _absent:
                      self._map[key].remove(node)
                      self._items.removenode(node)
          return self
docs: Sets <key>'s list of values to <values>. Existing items with key <key>
          are first replaced with new values from <values>. Any remaining old
          items that haven't been replaced with new values are deleted, and any
          new values from <values> that don't have corresponding items with <key>
          to replace are appended to the end of the list of all items.
  
          If values is an empty list, [], <key> is deleted, equivalent in action
          to del self[<key>].
  
          Example:
            omd = omdict([(1,1), (2,2)])
            omd.setlist(1, [11, 111])
            omd.allitems() == [(1,11), (2,2), (1,111)]
  
            omd = omdict([(1,1), (1,11), (2,2), (1,111)])
            omd.setlist(1, [None])
            omd.allitems() == [(1,None), (2,2)]
  
            omd = omdict([(1,1), (1,11), (2,2), (1,111)])
            omd.setlist(1, [])
            omd.allitems() == [(2,2)]
  
          Returns: <self>.