Dictionaries

Definition:  awesome, but kind of annoying.

What is a dictionary?

  • A collection of key/value pairs
  • Can contain any data type
  • Have no order
  • Can be of any size

Basic Syntax

{key: value}

Key/value pairs are grouped in {} and separated by a colon.

Unique keys

Keys in dictionaries must be unique

Keys can be any date type

But be careful with this.

Values can be any data type.

You can go nuts, but working with complex dictionaries will be harder.

Making a dictionary

>>> mydict = {}
>>> 
>>> mydict['key1'] = 'my first value'
>>> mydict['key2'] = 'my second value'
>>> 
>>> mydict
{'key2': 'my second value', 'key1': 'my first value'}

Remember that it needs to exist to be mutated.

use the

dict[key] = value

to add values to your dictionary

Accessing values

>>> mydict
{'key2': 'my second value', 'key1': 'my first value'}

>>> mydict['key1']
'my first value'
>>> mydict['key2']
'my second value'

Call a value from your dictionary with the

dict[key]

formula

Uhh, but how do I know what the keys are?

dict.keys()

Returns a list of all the keys.

Change a current value

>>> mydict
{'key2': 'my second value', 'key1': 'my first value'}
>>> mydict['key1']
'my first value'
>>> mydict['key2']
'my second value'
>>> mydict['key2'] = 'this is another value'
>>> mydict['key2']
'this is another value'

Use the same assignment syntax.

How do I loop through a dictionary?

There are many ways.

They all are super annoying.

>>> for something in mydict:
...     print something
... 
key2
key1

wat.

 

Where are the values?

 

Bookmark this:
https://docs.python.org/2/library/stdtypes.html#dict

>>> countedlist
{'blue': 11, 'green': 10, 'red': 9}
>>> for key, value in countedlist.iteritems():
...     print key, value
... 
blue 11
green 10
red 9
>>> players = {1:{'name':'foo'}, 
2:{'name': 'fizzy'}, 
3: {'name': 'pop'}}
>>> for key, value in players.iteritems():
...     innerdictkeys = value.keys()
...     print key,
...     for item in innerdictkeys:
...         print value[item]

But I think I hate dictionaries.

That's fine.

That's normal.

The only thing that makes it better is practice.

You will need to use them!

Dealing with data becomes easier with dictionaries.

But wow are they the worst

Seriously, practice.

A basic example

Counting things

>>> from collections import Counter
>>> import random

>>> letters = ['a','b','c']
>>> mylist = [random.choice(letters) for i in range(50)]

>>> mylist
['b', 'a', 'b', 'c', 'c', 'a', 'b', 'b', 'c', 'b', 
'b', 'a', 'c', 'c', 'c', 'a', 'a', 'b', 'a', 'b', 
'b', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 
'c', 'b', 'a', 'a', 'a', 'b', 'a', 'c', 'c', 'a', 
'b', 'a', 'c', 'a', 'c', 'b', 'a', 'b', 'c', 'c']

>>> countedlist = Counter(mylist)
>>> countedlist
Counter({'a': 17, 'b': 17, 'c': 16})

That's awesome. How do we do this by hand?

>>> colors = ['red','green','blue']
>>> mylist = [random.choice(colors) for i in range(30)]
>>> countedlist = {}
>>> mylist
['red', 'green', 'green', 'green', 'red', 'blue', 
'green', 'red', 'blue', 'blue', 'green', 'red', 
'red', 'blue', 'blue', 'blue', 'green', 'green', 
'blue', 'blue', 'blue', 'red', 'red', 'red', 
'green', 'green', 'blue', 'red', 'green', 'blue']

>>> for candy in mylist:
...     if candy in countedlist:
...         countedlist[candy] += 1
...     else:
...         countedlist[candy] = 1
... 
>>> countedlist
{'blue': 11, 'green': 10, 'red': 9}
Made with Slides.com