Dynamic String Alignment Code
All the code from len_list1 = [] to a = max(len_list1) can be replaced with:

a = len(max(person_dict.values(), key=len))


max's key parameter is really helpful here. key is called on each element before max checks it. Dictionary's values method is useful here too. If you already have the data in a dictionary, you might as well make use of that fact. 

You could also use a generator expression here to have the same effect:

a = max(len(val) for val in person_dict.values())


Or, since we're just mapping using an existing function, map would be clean here as well:

a = max(map(len, person_dict.values()))


The point is, use iteration constructs to avoid needing to repeat the same code over and over again for different objects.