   # Returns a list of values of this
   values: ->
     keys = @keys()
-    values = []
-    for key in keys
+    values = new List()
+    for key in keys.value
       val = @__getitem__(key)
-      values.push(val)
+      values.append(val)
     return values
 
   # **Unimplemented**

      return d

  has_key: (key) ->
    return key in @value

  items: ->
    items = [] #Unsure if this should be JS list or Pythonscript List
    for key of @value
      val = @__getitem__(key)
      tuple = new Tuple([key, val])
      items.push(tuple)
    return items

  iteritems: ->


  # Returns a list of keys of this
  keys: ->
    keys = new List Object.keys(@value)
    return keys

  # Returns the popped value at key if key exists. 
  # Else returns `d` if default `d` exists
  # Else raises `KeyError`
  pop: (key, d) ->
    keys = @keys()
    if keys.__contains__(key)
      val = @value[key]
      delete @value[key]
      return val
    else if d?
      return d
    else
      raise new KeyError "#{key}"

  # Pops random item from this and returns a 2-tuple
  popitem: ->
    if @__len__().value == 0
      raise new KeyError "popitem(): dictionary is empty"
    keys = @keys()
    randomKey = keys.__getitem__ 0
    randomValue = @__getitem__ randomKey
    return new Tuple [randomKey, randomValue]

  setdefault: (key, d) ->
    if key not in @keys().value
      @__setitem__ key, d
    return @value[key]

  # **Unimplemented**
