But it will look very inefficient with all the Access Rights. Some access rights have access to different menus e.g (Access Level 1 = Menu 1 and Menu 4). So I cannot just use a for loop to print all menus like so.

for option,num in choices.items():
print(option,num)

I've also attempted using the itemgetter() function which is available in the operator module, but I was unable of figuring out how to:
1. Print the outcome in lines, 2. Numerate the outcome in order (1,2,3)

What we did here is created a menu object and a user object that hold all information relating to groups (access rights). In the menu definition we also give it a group name (or access name if you prefer). And then when we define the user we also set the groups that user can access (what menus it can access).

That simplifies the code and makes it so that we don't need to use if's for each user and each group (access right).

After defining all of this it's simply a matter of using user.get_menus(menus) to get the right menus for that user. Later on we loop through the options. We don't hardcode the choices (range(1,2)) but use the already existing user_menus list to know how to create the menu.

\$\begingroup\$Please explain what you did to the code in addition to providing the updated code.\$\endgroup\$
– Nic HartleyJan 17 '16 at 3:54

\$\begingroup\$I really appreciate the effort put in as well as the explanation but right now I'm a beginner so I have no knowledge of class *name*(object) - Never used the class command, def __init__(self, title, group_name) - Honestly no clue what self. is used for, for menu in menus: if menu.group_name in self.groups: user_menus.append(menu) return user_menus - I'll need to break the code down to get what it does But I'll do some research on all these new functions - Sorry but if it's a "Thanks" comment but I really appreciate it !\$\endgroup\$
– TwilightKillerXJan 17 '16 at 18:07

As you can see, whilst we took advantage of a new dictionary to print the allowed places,
you would still need boilerplate for all the locations.
Instead you could use str.format to display the places, just like I did for the menu.

\$\begingroup\$Did research into these functions so I could understand the code, correct me if I'm wrong please. '\n'.join() - Elements of a sequenece joined by str(new line) seperator. for i,s in - i = number from enumerate, s = item from dictionary enumerate(),1 - Basicaly numerates the items got from itemgetter() beginning with 1\$\endgroup\$
– TwilightKillerXJan 17 '16 at 18:41

\$\begingroup\$Hi, thank you for response. I think that you understand it correctly. Just one terminology related thing. s is a value from the choices dictionary, not an item. In python terminology, item is a tuple of key and value.\$\endgroup\$
– user1112457Jan 17 '16 at 19:00