'Validate and convert a dict-like object into values for set()ing.
This is called behind the scenes when a MappedCollection is replaced
entirely by another collection, as in::
myobj.mappedcollection = {\'a\':obj1, \'b\': obj2} # ...
Raises a TypeError if the key in any (key, value) pair in the dictlike
object does not match the key that this collection\'s keyfunc would
have assigned for that value.'

@collection.converter
def _convert(self, dictlike):

    for (incoming_key, value) in util.dictlike_iteritems(dictlike):
        new_key = self.keyfunc(value)
        if (incoming_key != new_key):
            raise TypeError(("Found    incompatible    key    %r    for    value    %r;    this    collection's    keying    function    requires    a    key    of    %r    for    this    value." % (incoming_key, value, new_key)))
        (yield value)
