Dictionaries

In [1]:
l1 = [120171122, 'Ahmed', 'MM Dept', 1]
# index 0 : student id 
# index 1 : student name 
# index 2 : department 
# ....
print('department:', l1[2])
print('name:', l1[1])
department: MM Dept
name: Ahmed
In [2]:
dic = {}
print(dic)
{}
In [3]:
# add using label (key)
# dic[0] use index in list but not in dictionary 
dic['id'] = 120171122 # key = id, value = 120171122
dic['name'] = 'Ahmed'
dic['dept'] = 'MM'
dic['level'] = 1 
print(dic)
{'id': 120171122, 'name': 'Ahmed', 'dept': 'MM', 'level': 1}
In [4]:
print('id:', dic['id'])
id: 120171122

Dictionary

key : value

what is in your bag

In [5]:
bag = {'tissue': 5, 'money' : 15, 'candy' : 3, 'books' : 0, 'laptop' : 1}
print(bag)
{'tissue': 5, 'money': 15, 'candy': 3, 'books': 0, 'laptop': 1}
In [6]:
bag_list = [5, 15, 3, 0, 1]
In [7]:
bag['money'] = 30 
print(bag)
{'tissue': 5, 'money': 30, 'candy': 3, 'books': 0, 'laptop': 1}
In [8]:
bag['phone'] = 1
print(bag)
{'tissue': 5, 'money': 30, 'candy': 3, 'books': 0, 'laptop': 1, 'phone': 1}
In [9]:
bag['money'] = 0 
print(bag)
{'tissue': 5, 'money': 0, 'candy': 3, 'books': 0, 'laptop': 1, 'phone': 1}
In [10]:
bag['candy']+=2
print(bag)
{'tissue': 5, 'money': 0, 'candy': 5, 'books': 0, 'laptop': 1, 'phone': 1}
In [11]:
print(bag['tissue'])
5
In [12]:
print(bag['pen'])
----------------------------------------------------
KeyError           Traceback (most recent call last)
<ipython-input-12-c400d2eb5f45> in <module>
----> 1 print(bag['pen'])

KeyError: 'pen'
In [13]:
# if key in dictonary: 
if 'pen' in bag:
    print(bag['pen'])
In [14]:
'pen' in bag
Out[14]:
False
In [15]:
# key in dictionary 
'candy' in bag
Out[15]:
True
In [16]:
# the value of the key 
bag['candy']
Out[16]:
5
In [17]:
# takes a key and return the value of the key
bag.get('pen')
In [18]:
print(bag.get('pen'))
None
In [19]:
# if key exists, retrurn the value, else return the default (0)
bag.get('pen', 0)
Out[19]:
0
In [20]:
# if key exists, retrurn the value, else return the default ('not found')
bag.get('pen', 'not found')
Out[20]:
'not found'
In [21]:
bag.get('candy', 0)
Out[21]:
5
In [22]:
bag.get('candy', 'not found')
Out[22]:
5
In [23]:
names = ['ahmed', 'mohammed', 'ali', 'hassan', 'khalid', 'ahmed', 'mohammed']
print(names)
['ahmed', 'mohammed', 'ali', 'hassan', 'khalid', 'ahmed', 'mohammed']
In [24]:
name_dict = dict() # same as name_count = {}
for name in names:
    if name in name_dict:
        name_dict[name] += 1
    else:
        name_dict[name] = 1
    print(name_dict)
print('-------------------------')
print(name_dict)
{'ahmed': 1}
{'ahmed': 1, 'mohammed': 1}
{'ahmed': 1, 'mohammed': 1, 'ali': 1}
{'ahmed': 1, 'mohammed': 1, 'ali': 1, 'hassan': 1}
{'ahmed': 1, 'mohammed': 1, 'ali': 1, 'hassan': 1, 'khalid': 1}
{'ahmed': 2, 'mohammed': 1, 'ali': 1, 'hassan': 1, 'khalid': 1}
{'ahmed': 2, 'mohammed': 2, 'ali': 1, 'hassan': 1, 'khalid': 1}
-------------------------
{'ahmed': 2, 'mohammed': 2, 'ali': 1, 'hassan': 1, 'khalid': 1}
In [25]:
name_dict['ahmed']
Out[25]:
2
In [26]:
name_dict['khalid']
Out[26]:
1
In [27]:
# name_dict['mahmood']
name_dict.get('mahmood', 0)
Out[27]:
0
In [28]:
# find name count using get 
name_dict = dict() # same as name_count = {}
for name in names: 
    # name_dict[name] += 1 in case name in the dict 
    # name_dict[name] = 0 + 1 in case name not in dict (add to the dictionary)
    name_dict[name] = name_dict.get(name, 0) + 1 
print(name_dict)
{'ahmed': 2, 'mohammed': 2, 'ali': 1, 'hassan': 1, 'khalid': 1}
In [29]:
name_dict.items()
Out[29]:
dict_items([('ahmed', 2), ('mohammed', 2), ('ali', 1), ('hassan', 1), ('khalid', 1)])

Dictionary Methods

In [31]:
print(dir(name_dict))
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
In [32]:
bag = {'tissues': 30, 'candy' : 3, 'books': 2}
print(bag)
{'tissues': 30, 'candy': 3, 'books': 2}
In [35]:
print(bag.items())
dict_items([('tissues', 30), ('candy', 3), ('books', 2)])
In [36]:
bag.get('candy', 0)
Out[36]:
3
In [37]:
bag.get('pen', 0)
Out[37]:
0
In [39]:
bag.clear()
print(bag)
{}
In [40]:
bag = {'tissues': 30, 'candy' : 3, 'books': 2}
print(bag)
{'tissues': 30, 'candy': 3, 'books': 2}
In [41]:
bag.keys()
Out[41]:
dict_keys(['tissues', 'candy', 'books'])
In [43]:
bag.values()
Out[43]:
dict_values([30, 3, 2])
In [44]:
bag.items()
Out[44]:
dict_items([('tissues', 30), ('candy', 3), ('books', 2)])
In [46]:
bag.pop('candy')
Out[46]:
3
In [47]:
print(bag)
{'tissues': 30, 'books': 2}
In [48]:
bag.popitem()
Out[48]:
('books', 2)
In [49]:
print(bag)
{'tissues': 30}
In [50]:
bag2 = bag.copy()
In [51]:
print(bag2)
{'tissues': 30}
In [52]:
bag.update({'books': 2})
In [53]:
print(bag)
{'tissues': 30, 'books': 2}
In [54]:
bag['pen'] = 2 # add. Similar to update
print(bag)
{'tissues': 30, 'books': 2, 'pen': 2}
In [56]:
bag.setdefault('candy', 0)
Out[56]:
0
In [57]:
bag.get('candy')
# bag.get('candy', 0)
Out[57]:
0