'The method to serialize the Python data types.
:param value: A python value to be serialized to DynamoDB. Here are
the various conversions:
Python                                  DynamoDB
None                                    {\'NULL\': True}
True/False                              {\'BOOL\': True/False}
int/Decimal                             {\'N\': str(value)}
string                                  {\'S\': string}
Binary/bytearray/bytes (py3 only)       {\'B\': bytes}
set([int/Decimal])                      {\'NS\': [str(value)]}
set([string])                           {\'SS\': [string])
set([Binary/bytearray/bytes])           {\'BS\': [bytes]}
list                                    {\'L\': list}
dict                                    {\'M\': dict}
For types that involve numbers, it is recommended that ``Decimal``
objects are used to be able to round-trip the Python type.
For types that involve binary, it is recommended that ``Binary``
objects are used to be able to round-trip the Python type.
:rtype: dict
:returns: A dictionary that represents a dynamoDB data type. These
dictionaries can be directly passed to botocore methods.'

def serialize(self, value):

    dynamodb_type = self._get_dynamodb_type(value)
    serializer = getattr(self, ('_serialize_%s' % dynamodb_type.lower()))
    return {dynamodb_type: serializer(value)}
