<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_attached_pipettes(self):
 """ Gets model names of attached pipettes :return: :dict with keys 'left' and 'right' and a model string for each mount, or 'uncommissioned' if no model string available """

        left_data = {
                'mount_axis': 'z',
                'plunger_axis': 'b',
                'model': self.model_by_mount['left']['model'],
                'id': self.model_by_mount['left']['id']
            }
        left_model = left_data.get('model')

        if left_model:
            tip_length = pipette_config.load(
                left_model, left_data['id']).tip_length
            left_data.update({'tip_length': tip_length})

        right_data = {
                'mount_axis': 'a',
                'plunger_axis': 'c',
                'model': self.model_by_mount['right']['model'],
                'id': self.model_by_mount['right']['id']
            }
        right_model = right_data.get('model')
        if right_model:
            tip_length = pipette_config.load(
                right_model, right_data['id']).tip_length
            right_data.update({'tip_length': tip_length})
        return {
            'left': left_data,
            'right': right_data
        }