docs: def writeDict(self, n):
          """
          Writes a C{dict} to the stream.
  
          @type n: C{__builtin__.dict}
          @param n: The C{dict} data to be encoded to the AMF3 data stream.
          @raise ValueError: Non C{int}/C{str} key value found in the C{dict}
          @raise EncodeError: C{dict} contains empty string keys.
          """
          # Design bug in AMF3 that cannot read/write empty key strings
          # for more info
          if '' in n:
              raise pyamf.EncodeError("dicts cannot contain empty string keys")
  
          if self.use_proxies:
              self.writeProxy(n)
  
              return
  
          self.stream.write(TYPE_ARRAY)
  
          ref = self.context.getObjectReference(n)
  
          if ref != -1:
              self._writeInteger(ref << 1)
  
              return
  
          self.context.addObject(n)
  
          # The AMF3 spec demands that all str based indicies be listed first
          keys = n.keys()
          int_keys = []
          str_keys = []
  
          for x in keys:
              if isinstance(x, python.int_types):
                  int_keys.append(x)
              elif isinstance(x, python.str_types):
                  str_keys.append(x)
              else:
                  raise ValueError("Non int/str key value found in dict")
  
          # Make sure the integer keys are within range
          l = len(int_keys)
  
          for x in int_keys:
              if l < x <= 0:
                  # treat as a string key
                  str_keys.append(x)
                  del int_keys[int_keys.index(x)]
  
          int_keys.sort()
  
          # If integer keys don't start at 0, they will be treated as strings
          if len(int_keys) > 0 and int_keys[0] != 0:
              for x in int_keys:
                  str_keys.append(str(x))
                  del int_keys[int_keys.index(x)]
  
          self._writeInteger(len(int_keys) << 1 | REFERENCE_BIT)
  
          for x in str_keys:
              self.serialiseString(x)
              self.writeElement(n[x])
  
          self.stream.write_uchar(0x01)
  
          for k in int_keys:
              self.writeElement(n[k])