<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def joined_attrs(self, delimiter=', ', enhanced=True, plot_data=False, keep_all=True):
 """Join the attributes of the arrays in this project Parameters %(join_dicts.parameters.delimiter)s enhanced: bool If True, the :meth:`psyplot.plotter.Plotter.get_enhanced_attrs` method is used, otherwise the :attr:`xarray.DataArray.attrs` attribute is used. plot_data: bool It True, use the :attr:`psyplot.plotter.Plotter.plot_data` attribute of the plotters rather than the raw data in this project %(join_dicts.parameters.keep_all)s Returns ------- dict A mapping from the attribute to the joined attributes which are either strings or (if there is only one attribute value), the data type of the corresponding value"""

        if enhanced:
            all_attrs = [
                plotter.get_enhanced_attrs(
                    getattr(plotter, 'plot_data' if plot_data else 'data'))
                for plotter in self.plotters]
        else:
            if plot_data:
                all_attrs = [plotter.plot_data.attrs
                             for plotter in self.plotters]
            else:
                all_attrs = [arr.attrs for arr in self]
        return utils.join_dicts(all_attrs, delimiter=delimiter,
                                keep_all=keep_all)