def table(data, head): # Formats the data into a nice table in a string t = "{:^25}|{:^10}|\n".format(head[0],head[1]) t += ("-"*len(t)+"\n") for n,p in data.items(): t += ("{:^25}|{:^10}|\n".format(n, p)) return(t) def main(): with open('norway_municipalities_2017.csv') as f: # we will make a dict where the the kei is the district and the value the population d = {} # assume the csv file always has a header l_iter = iter(f) l_iter.__next__() for l in l_iter: # we get a list where 0 is the kommune name, 1 is what fylke it is in and 2 is the population ll = l.strip("\n").split(',') name = ll[1] if name in d.keys(): d.update({name: d.get(name) + int(ll[2])}) else: d.update({name: int(ll[2])}) head = ["District", "Population"] res = {key: val for key, val in sorted(d.items(), key = lambda ele: ele[1], reverse=True)} print(table(res, head)) if __name__ == "__main__": main()