Return the zipcodes mapping as a list of ``{zipcode: location}`` dicts.
        The zipcodes file will be downloaded if necessary.

def get_locations(self):
        """
        Return the zipcodes mapping as a list of ``{zipcode: location}`` dicts.
        The zipcodes file will be downloaded if necessary.
        """
        if not self.zipcode_mapping:
            self.download(overwrite=False)

            zipcode_mapping = {}
            with UnicodeReader(self.file_path, delimiter=';', encoding='latin1') as csv_reader:
                # Skip header
                next(csv_reader)
                for line in csv_reader:
                    zipcode_mapping[int(line[1])] = Location(
                        official_name=line[0],
                        canton=line[5],
                        municipality=line[3]
                    )
            self.zipcode_mapping = zipcode_mapping

        return self.zipcode_mapping