Dictionary
A dictionary just like a list, tuple and a set which is a sequence. A dictionary is rather key-value pair. String, list, etc are number-indexed. A dictionary is key-indexed.
Structure of a dictionary
# dict_var = { key : value }
# empty dictionary
my_dict = {}
# profile dictionary
profile = {
'name': 'John Doe',
'age': 32,
'job': 'Software engineer'
}
Casting
Casting is done with dict()
# passing a keyword and a value
# dict(key-word=value, ... )
my_dict = dict(
name='John Doe',
age=32,
job='Software engineer'
)
# convert a list of tuple to a dictionary
my_tupled_list = [('name', 'John Doe'), ('age', 32, ),
('job', 'Software engineer')]
my_dict = dict(my_tupled_list)
print(my_tupled_list)
# output->
# {'name': 'John Doe', 'age': 32, 'job': 'Software engineer'}
Indexing and updating a dictionary
Indexing and updating are done just as we would do to a list.
# consider this dictionary
profile = {
'name': 'John Doe',
'age': 32,
'job': 'Software engineer'
}
# get the name and job
name = profile['name']
job = profile['job']
print(f"Candidates name is {name} and works, {job}")
# update the age
profile['age'] = 30
# add a new key
profile['lang'] = 'Python'
# delete a key to delete a value using - del
del profile['age']
dictionary functions
Functions | description |
---|---|
clear | deletes all the items in the dictionary, similar to reassigning it to dict()
|
copy | returns a copy of the dictionary |
get( key , default value ) |
returns a value of that key just like dict_object[key] but returns default value when key doesn't exist. This does not update the dictionary |
items | returns the items in the dictionary |
values | returns the values of the dictionary |
keys | returns the keys of the dictionary |
pop( key ) |
deletes item with the key just like del |
popitem | deletes the last item in the dictionary |
setdefault( key , value ) |
adds key value to dictionary if key doesn't exist, unlike get
|
Examples
# empty dict
profile = dict()
# add an item - 3 ways use any
profile['name'] = 'John Doe' # we use this more - simplier
profile.update(age=32)
profile.setdefault('job', 'Software engineer')
print(profile)
# get an item from the dict
# get the keys from a dictionary
profile_keys = profile.keys()
print(profile_keys)
# output-> dict_keys(['name', 'age', 'job'])
# get the values from a dictionary
profile_values = profile.values()
print(profile_values)
# output-> dict_values(['John Doe', 32, 'Software engineer'])
# get the key and value as items
profile_content = profile.items()
print(profile_content)
# do the printing
# get element by key
username = profile['name']
print(f"user name: {username}")
# what if the key doesn't exist
# use get with default value
# profile['height'] -> KeyError
height = profile.get('height', 130)
print(height) # -> 130
# but height won't be added to the dict
# use set default, update or dict[key] = value
if not 'height' in profile.keys():
# any of this would work
profile['height'] = 120
# profile.update(height = 120)
# profile.setdefault('height', 120)
else:
print('Profile updated, height added')
print(profile)
# copy
new_profile = profile.copy()
print(new_profile)
# pop - remove height
profile.pop('height') # or
# del profile['height']
# delete all items in the dict
profile.popitem()
print(len(new_profile) == len(profile))
Looping through a dictionary
Looping is the same everywhere in a list, set and tuple, in even a string, but for a dictionary, we may loop using a key or and value.
# consider this sample dictionary
profile = {
'name': 'John Doe',
'age': 32,
'job': 'Software engineer'
}
# looping through keys
for key in profile.keys():
print(f"key: {key}")
# looping through values
for value in profile.values():
print(f"value: {value}")
# looping through the items in the dictionary
# we loop through the key and value at the same time
for key, value in profile.items():
print(f"{key} has a value of {value}")
Practicals
- Write a function that removes items with duplicate values
- Write a function that takes a dictionary as an argument, return another dictionary that has the frequency of the length of the value, if value is
int
orfloat
, frequency is the number of digits. Keep the keys of the old as the new.
Summary
- is a
key-value
pair sequence - is of structure,
my_dict = {key:value}
-
dict(name='name')
casts to a dict - dict_obj[
key
] returns thevalue
atkey
-
dict_obj[key] = value
to create new item in dictionary or update - loop through dictionary by keys, values and items