Unordered Collection
In this lesson you will learn Dictionary and Set; the two data structures which are not considered a sequence.
Dictionaries
Dictionary is a set of key:value pairs in which the keys are unique. A pair of braces creates an empty dictionary: { }
Although in the latest implementation of Python, dictionary maintains the order of insert, it is considered an implementation detail and should not be relied upon as it may change in the future as per the official documentation.
Here is an example of dictionary with values:
country_codes = {'US':'United States', 'UK':'United Kingdom',
'CA':'Canada', 'MX':'Mexico'}
Sequences are indexed by range of numbers but dictionaries are indexed by keys. A key can be of any immutable type although using a string or a number is most common. Tuples can be used as keys as long as the elements of the tuples are immutable.
Here are some of common operations on Dictionaries
Operations | Example | Output | Comments |
---|---|---|---|
Get value given a key | country_codes['US'] | 'United States' | Dictionary keys are unique. Value can be any complex type including ordered or unordered collection |
Change value for a key | country_codes['US'] = 'USA' print(country_codes['US']) |
'USA' | Dictionaries are mutable so values can be changed |
Delete a key del | del country_codes['US'] print(country_codes) |
{'UK': 'United Kingdom', 'CA': 'Canada', 'MX': 'Mexico'} | A key/value pair is deleted |
Get a list of keys keys() | keys = list(country_codes.keys()) print(keys) |
['UK','CA', 'MX'] | You can check on the data type of keys by invoking print(type(keys)). You will notice that it is of type list |
Construct a dict from list of tuples | dict([('UK', 'United Kingdom'),('MX','Mexico')]) |
{'MX': 'Mexico', 'UK': 'United Kingdom'} | dict is one of the built in function |
Construct a dict using arguments | dict(UK = 'United Kingdom', MX ='Mexico') | {'MX': 'Mexico', 'UK': 'United Kingdom'} | Keys have to be strings for this to work |
Remove all elements clear() | state_codes = {'MI':'Michigan', 'IL':'Illinois'} state_codes.clear() print(state_codes) |
{} | |
Remove and get the element with specified key pop() | state_codes = {'MI':'Michigan', 'IL':'Illinois'} state_codes.pop('MI') print(state_codes) |
{'IL':'Illinois'} | This method returns the value of the popped key/value pair |
Remove last key/value pair popitem() | state_codes = {'MI':'Michigan', 'IL':'Illinois'} state_codes.popitem() print(state_codes) |
{'MI': 'Michigan'} | This method returns the popped key/value pair as a tuple |
Add a key/Value pair | country_codes['IN'] = 'India' print(country_codes) |
{'UK': 'United Kingdom', 'CA': 'Canada', 'IN':'India', MX': 'Mexico'} | If the key is not present a new Key/Value pair is added. Else the existing value for the key is replaced. |
Points to note
- If you try to access a key which is not present in the dictionary, KeyError is thrown
Dictionary Comprehension
Just like list, you can also creat a dictionary comprehension and here is an example
d1 = {'a':1, 'b': 5, 'c':10}
d2 = {v:k for k, v in d1.items()}
d2
Output:
{1: 'a', 5: 'b', 10: 'c'}
In the above example, d2 contains d1 with key/value pair reversed
Getting the maximum key or value
You can get the largest key using the max function. This is straight forward. However if you want to get the key which holds the highest value then you would use the below expression
max(d1, key=d1.get)
Output:
'c'