Dictionaries {}

- Dictionaries have keys and values

- Dictionaries keys are like indexes in lists and tuples 

- Dictionaries keys do not have to be integers

- Dictionaries keys are immutable and unique

- Dictionaries values are like elements in lists and tuples

- Dictionaries values are mutable

- Dictionaries values can be duplicates

- Dictionaries can also contain many dictionaries -> called nested dictionaries

Overview

- Creating Dictionaries

    - using {}
    - using dict()

- Nesting Dictionaries

- Returning keys

- Returning Values 

- Returning Values using keys

- Adding values to Dictionaries

- Removing Values from Dictionaries

    - Removing values with Specified keys (pop)
    - Removing values with Specified keys (del)
    - Removing last value of Dictionaries

- Changeing Values in Dictionaries

- Dictionaries and Loop

    - Returning Keys
    - Returning Values (First Way)
    - Returning Values (Second Way)
    - Returning Keys and Values

- Dictionaries and if Statements

- Dictionaries and try/except

- Copying Dictionaries

    - using copy()
    - using dict() 

- Updating Dictionaries

- Dictionary Length

- Emtying Dictionaries

- Deleting Dictionaries

Creating Dictionaries

- using {}
- using dict()

Creating Dictionaries using {}

In [12]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
    
my_dict
Out[12]:
{'William Shakespeare': 42, 'Agatha Christie': 85, 'Barbara Cartland': 723}

Creating Dictionaries using dict()

In [13]:
your_dict = dict(GingerandRosa = 2013 , Enemy = 2014, ObviousChild = 2014)                

your_dict
Out[13]:
{'GingerandRosa': 2013, 'Enemy': 2014, 'ObviousChild': 2014}

Nesting Dictionaries

In [17]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
your_dict = {"Ginger & Rosa": 2013 , "Enemy" : 2014, "Obvious Child": 2014}

both_dict = { "my_dict" : my_dict, "your_dict" : your_dict }
    
both_dict
Out[17]:
{'my_dict': {'William Shakespeare': 42,
  'Agatha Christie': 85,
  'Barbara Cartland': 723},
 'your_dict': {'Ginger & Rosa': 2013, 'Enemy': 2014, 'Obvious Child': 2014}}

Returning keys

In [18]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
my_dict.keys()
Out[18]:
dict_keys(['William Shakespeare', 'Agatha Christie', 'Barbara Cartland'])

Returning Values

In [19]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}

my_dict.values()
Out[19]:
dict_values([42, 85, 723])

Returning Values using keys

In [20]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}

my_dict["Agatha Christie"]
Out[20]:
85

Adding values to Dictionaries

In [21]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}

my_dict['Georges Simenon'] = 570

my_dict
Out[21]:
{'William Shakespeare': 42,
 'Agatha Christie': 85,
 'Barbara Cartland': 723,
 'Georges Simenon': 570}

Removing Values from Dictionaries

- Removing values with Specified keys (pop)
- Removing values with Specified keys (del)
- Removing last value of Dictionaries

Removing values with Specified keys (pop)

In [22]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
my_dict.pop("William Shakespeare")

my_dict
Out[22]:
{'Agatha Christie': 85, 'Barbara Cartland': 723}

Removing values with Specified keys (del)

In [23]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
del my_dict["William Shakespeare"]

my_dict
Out[23]:
{'Agatha Christie': 85, 'Barbara Cartland': 723}

Removing last value of Dictionaries

In [24]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
my_dict.popitem()

my_dict
Out[24]:
{'William Shakespeare': 42, 'Agatha Christie': 85}

Changeing Values in Dictionaries

In [7]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723,
                
                  "Danielle Steel": 179 , "Harold Robbins": 23 }

my_dict['Georges Simenon'] = 2

my_dict
Out[7]:
{'William Shakespeare': 42,
 'Agatha Christie': 85,
 'Barbara Cartland': 723,
 'Danielle Steel': 179,
 'Harold Robbins': 23,
 'Georges Simenon': 2}

Dictionaries and Loop

- Returning Keys

- Returning Values (First Way)

- Returning Values (Second Way)

- Returning Keys and Values

Returning Keys

In [32]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
for key in my_dict:
    
    print(key)
William Shakespeare
Agatha Christie
Barbara Cartland

Returning Values (First Way)

In [37]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
for value in my_dict.values():
    
    print(value)
42
85
723

Returning Values (Second Way)

In [39]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
for value in my_dict:
  
    print(my_dict[value])
42
85
723

Returning Keys and Values

In [40]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
for key, value in my_dict.items():
  
    print(key,value)
William Shakespeare 42
Agatha Christie 85
Barbara Cartland 723

Dictionaries and if Statements

In [30]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
if "William Shakespeare" in my_dict:
    
    print("Yes")

else:
    
    print("No")
Yes

Dictionaries and try/except

In [29]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
try:
    
    print(my_dict = ["John"])
    
except:
    
    print("It is incorrect")
It is incorrect

Copying Dictionaries

- using copy()
- using dict() 

Copying Dictionaries ( copy() )

In [41]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
your_dict = my_dict.copy()

your_dict
Out[41]:
{'William Shakespeare': 42, 'Agatha Christie': 85, 'Barbara Cartland': 723}

Copying Dictionaries ( dict() )

In [42]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
your_dict = dict(my_dict)

your_dict
Out[42]:
{'William Shakespeare': 42, 'Agatha Christie': 85, 'Barbara Cartland': 723}

Updating Dictionaries

In [46]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
             
new_dict = { "William Shakespeare": 44 , "Agatha Christie": 88 , "Barbara Cartland": 777}

my_dict.update(new_dict)

my_dict
Out[46]:
{'William Shakespeare': 44, 'Agatha Christie': 88, 'Barbara Cartland': 777}

Dictionary Length

In [43]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
len(my_dict)
Out[43]:
3

Emtying Dictionaries

In [44]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}

my_dict.clear()

my_dict
Out[44]:
{}

Deleting Dictionaries

- When you delete the dictionary -> your dictionary no longer exist
- If you call your dictionary -> it causes an error 
- Error -> NameError: name 'my_dict' is not defined
In [45]:
my_dict = { "William Shakespeare": 42 , "Agatha Christie": 85 , "Barbara Cartland": 723}
                
del my_dict

my_dict
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-45-d0970d4bb879> in <module>
      3 del my_dict
      4 
----> 5 my_dict

NameError: name 'my_dict' is not defined