def _deserialize(self, value, environment=None):
        """A collection traverses over something to deserialize its value.

        :param value: a ``dict`` wich contains mapped values
        """

        if not isinstance(value, MappingABC):
            raise exc.Invalid(self)

        # traverse items and match against validated struct
        mapping = self._create_deserialize_type(value, environment)

        invalids = []

        for name, item in self:

            # deserialize each item
            try:
                mapping[name] = item.deserialize(
                    value.get(name, values.Undefined), environment
                )

            except exc.IgnoreValue:
                # just ignore this value
                pass

            except exc.Invalid as ex:
                # append this to the list of invalids, so we can return a complete overview of errors
                invalids.append(ex)

        if invalids:
            # on invalids this item is also ``Invalid``
            raise exc.InvalidChildren(self, invalids)

        return mapping