{ "metadata": { "name": "data_structures" }, "nbformat": 2, "worksheets": [ { "cells": [ { "cell_type": "markdown", "source": [ "### Tuple ###", "denoted with parentheses" ] }, { "cell_type": "code", "collapsed": false, "input": [ "t = (12,-1)", "print type(t)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "print isinstance(t,tuple)", "print len(t)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True", "2" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "t = (12,\"monty\",True,-1.23e6)", "print t[1]" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "monty" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "print t[-1]" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "-1230000.0" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "t[-2:] # get the last two elements, return as a tuple" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 5, "text": [ "(True, -1230000.0)" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "x = (True) ; print type(x)", "x = (True,) ; print type(x)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "", "" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "type(()), len(())" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 7, "text": [ "(tuple, 0)" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "type((,))" ], "language": "python", "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 1)", "output_type": "pyerr", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m type((,))\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "source": [ "single-element tuples look like `(element,)`" ] }, { "cell_type": "markdown", "source": [ "cannot change a tuple", "but you can create new one with concatenation" ] }, { "cell_type": "code", "collapsed": false, "input": [ "t[2] = False" ], "language": "python", "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/Users/jbloom/Classes/python-bootcamp/DataFiles_and_Notebooks/02_AdvancedDataStructures/\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "t[0:2], False, t[3:]" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 10, "text": [ "((12, 'monty'), False, (-1230000.0,))" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "## the above it ", "## not what we wanted... need to concatenate", "t[0:2] + False + t[3:]" ], "language": "python", "outputs": [ { "ename": "TypeError", "evalue": "can only concatenate tuple (not \"bool\") to tuple", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/Users/jbloom/Classes/python-bootcamp/DataFiles_and_Notebooks/02_AdvancedDataStructures/\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m## the above it\u001b[0m\n\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;31m## not what we wanted... need to concatenate\u001b[0m\n\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mFalse\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: can only concatenate tuple (not \"bool\") to tuple" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "y = t[0:2] + (False,) + t[3:] ; print y" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(12, 'monty', False, -1230000.0)" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "t*2" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 13, "text": [ "(12, 'monty', True, -1230000.0, 12, 'monty', True, -1230000.0)" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "source": [ "### List ###", "#### denoted with a brackets ####" ] }, { "cell_type": "code", "collapsed": false, "input": [ "v = [1,2,3] ; print len(v), type(v)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 " ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "v[0:2]" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 15, "text": [ "[1, 2]" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "v = [\"eggs\",\"spam\",-1,(\"monty\",\"python\"),[-1.2,-3.5]]", "len(v)" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 16, "text": [ "5" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "v[0] =\"green egg\"", "v[1] += \",love it.\"", "v[-1]" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 17, "text": [ "[-1.2, -3.5]" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "v[-1][1] = None ; print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['green egg', 'spam,love it.', -1, ('monty', 'python'), [-1.2, None]]" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "v = v[2:] ; print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[-1, ('monty', 'python'), [-1.2, None]]" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": true, "input": [ "# let's make a proto-array out of nested lists", "vv = [ [1,2], [3,4] ]" ], "language": "python", "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "print len(vv)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "determinant = vv[0][0]*vv[1][1] - vv[0][1]*vv[1][0]", "print determinant" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "-2" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "source": [ "the main point here: lists are **changeable**", "", "[back to slides]" ] }, { "cell_type": "markdown", "source": [ "### List ###", "#### lists can be extended, appended, and popped ####" ] }, { "cell_type": "code", "collapsed": false, "input": [ "v = [1,2,3]", "v.append(4)", "v.append([-5]) ; print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 3, 4, [-5]]" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "v = v[:4]", "w = ['elderberries', 'eggs']", "v + w" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 24, "text": [ "[1, 2, 3, 4, 'elderberries', 'eggs']" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "v.extend(w) ; print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 3, 4, 'elderberries', 'eggs']" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "v.pop()" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 26, "text": [ "'eggs'" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 3, 4, 'elderberries']" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "v.pop(0) ; print v ## pop the first element" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[2, 3, 4, 'elderberries']" ] } ], "prompt_number": 28 }, { "cell_type": "markdown", "source": [ " * `.append()`: adds a new element", " * `.extend()`: concatenates a list/element", " * `.pop()`: remove an element" ] }, { "cell_type": "markdown", "source": [ "#### lists can be searched, sorted, & counted ####" ] }, { "cell_type": "code", "collapsed": false, "input": [ "v = [1,3, 2, 3, 4, 'elderberries']", "v.sort() ; print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 3, 3, 4, 'elderberries']" ] } ], "prompt_number": 29 }, { "cell_type": "markdown", "source": [ "`reverse` is a keyword of the `.sort()` method" ] }, { "cell_type": "code", "collapsed": false, "input": [ "v.sort(reverse=True) ; print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['elderberries', 4, 3, 3, 2, 1]" ] } ], "prompt_number": 30 }, { "cell_type": "markdown", "source": [ "`.sort()` changes the the list in place " ] }, { "cell_type": "code", "collapsed": false, "input": [ "v.index(4) ## lookup the index of the entry 4" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 31, "text": [ "1" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "v.index(3)" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 32, "text": [ "2" ] } ], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "v.count(3)" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 33, "text": [ "2" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "v.insert(0,\"it's full of stars\") ; print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[\"it's full of stars\", 'elderberries', 4, 3, 3, 2, 1]" ] } ], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "v.remove(1) ; print v" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[\"it's full of stars\", 'elderberries', 4, 3, 3, 2]" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "source": [ "[back]" ] }, { "cell_type": "markdown", "source": [ "### List ###", "#### iteration ####" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = ['cat', 'window', 'defenestrate']", "for x in a:", " print x, len(x)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "cat 3", "window 6", "defenestrate 12" ] } ], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "for i,x in enumerate(a):", " print i, x, len(x)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0 cat 3", "1 window 6", "2 defenestrate 12" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "for x in a:", " print x," ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "cat window defenestrate" ] } ], "prompt_number": 39 }, { "cell_type": "markdown", "source": [ "The syntax for iteration is... ", "", " for variable_name in iterable:", " # do something with variable_name" ] }, { "cell_type": "markdown", "source": [ "The `range()` function" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = range(4) ; print x", "total = 0", "for val in range(4):", " total += val", " print \"By adding \" + str(val) + \\", " \" the total is now \" + str(total)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[0, 1, 2, 3]", "By adding 0 the total is now 0", "By adding 1 the total is now 1", "By adding 2 the total is now 3", "By adding 3 the total is now 6" ] } ], "prompt_number": 41 }, { "cell_type": "markdown", "source": [ "", "`range`([`start`,] `stop`[, `step`])", "\u2192 list of integers" ] }, { "cell_type": "code", "collapsed": false, "input": [ "total = 0", "for val in range(1,10,2):", " total += val", " print \"By adding \" + str(val) + \\", " \" the total is now \" + str(total)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "By adding 1 the total is now 1", "By adding 3 the total is now 4", "By adding 5 the total is now 9", "By adding 7 the total is now 16", "By adding 9 the total is now 25" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "a = ['Mary', 'had', 'a', 'little', 'lamb']", "for i in range(len(a)):", " print i, a[i]" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0 Mary", "1 had", "2 a", "3 little", "4 lamb" ] } ], "prompt_number": 43 }, { "cell_type": "markdown", "source": [ "### Sets ###", "#### denoted with a curly braces ####" ] }, { "cell_type": "code", "collapsed": false, "input": [ "{1,2,3,\"bingo\"}" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 45, "text": [ "set(['bingo', 1, 2, 3])" ] } ], "prompt_number": 45 }, { "cell_type": "code", "collapsed": false, "input": [ "print type({1,2,3,\"bingo\"})" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "" ] } ], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "print type({})" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "print type(set())" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "" ] } ], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "set(\"spamIam\")" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 51, "text": [ "set(['a', 'p', 's', 'm', 'I'])" ] } ], "prompt_number": 51 }, { "cell_type": "markdown", "source": [ "sets have unique elements. They can be", "compared, differenced, unionized, etc." ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = set(\"sp\"); b = set(\"am\"); print a ; print b" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "set(['p', 's'])", "set(['a', 'm'])" ] } ], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "c = set([\"a\",\"m\"])", "c == b" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 53, "text": [ "True" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "\"p\" in a" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 54, "text": [ "True" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "\"ps\" in a" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 55, "text": [ "False" ] } ], "prompt_number": 55 }, { "cell_type": "code", "collapsed": false, "input": [ "q = set(\"spamIam\")", "a.issubset(q)" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 57, "text": [ "True" ] } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "a | b" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 58, "text": [ "set(['a', 'p', 's', 'm'])" ] } ], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "q - (a | b)" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 59, "text": [ "set(['I'])" ] } ], "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ "q & (a | b)" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 60, "text": [ "set(['a', 'p', 's', 'm'])" ] } ], "prompt_number": 60 }, { "cell_type": "markdown", "source": [ "Like lists, we can use as (unordered) buckets", "`.pop()` gives us a random element" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# this is pretty volitile...wont be the same", "# order on all machines", "for i in q & (a | b):", " print i, " ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "a p s m" ] } ], "prompt_number": 62 }, { "cell_type": "code", "collapsed": true, "input": [ "q.remove(\"a\")" ], "language": "python", "outputs": [], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "q.pop()" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 64, "text": [ "'p'" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "print q.pop()", "print q.pop()" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "s", "m" ] } ], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "print q.pop()" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "I" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "q.pop()" ], "language": "python", "outputs": [ { "ename": "KeyError", "evalue": "'pop from an empty set'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/Users/jbloom/Classes/python-bootcamp/DataFiles_and_Notebooks/02_AdvancedDataStructures/\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mKeyError\u001b[0m: 'pop from an empty set'" ] } ], "prompt_number": 68 }, { "cell_type": "markdown", "source": [ "[back]" ] }, { "cell_type": "markdown", "source": [ "### 4 ways to make a Dictionary ###" ] }, { "cell_type": "code", "collapsed": true, "input": [ "# number 1...you've seen this", "d = {\"favorite cat\": None, \"favorite spam\": \"all\"}" ], "language": "python", "outputs": [], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "# number 2", "d = dict(one = 1, two=2,cat = 'dog') ; print d" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{'cat': 'dog', 'two': 2, 'one': 1}" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "# number 3 ... just start filling in items/keys", "d = {} # empty dictionary", "d['cat'] = 'dog'", "d['one'] = 1", "d['two'] = 2", "d" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 71, "text": [ "{'cat': 'dog', 'one': 1, 'two': 2}" ] } ], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [ "# number 4... start with a list of tuples", "mylist = [(\"cat\",\"dog\"), (\"one\",1),(\"two\",2)]", "print dict(mylist)" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{'one': 1, 'two': 2, 'cat': 'dog'}" ] } ], "prompt_number": 72 }, { "cell_type": "code", "collapsed": false, "input": [ "dict(mylist) == d" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 73, "text": [ "True" ] } ], "prompt_number": 73 }, { "cell_type": "markdown", "source": [ "#### Dictionaries: they can be complicated (in a good way) ####" ] }, { "cell_type": "code", "collapsed": true, "input": [ "d = {\"favorite cat\": None, \"favorite spam\": \"all\"}" ], "language": "python", "outputs": [], "prompt_number": 75 }, { "cell_type": "code", "collapsed": false, "input": [ "d = {'favorites': {'cat': None, 'spam': 'all'}, \\", " 'least favorite': {'cat': 'all', 'spam': None}}", "print d['least favorite']['cat']" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "all" ] } ], "prompt_number": 78 }, { "cell_type": "markdown", "source": [ "remember: the backslash (\\) allows you to across break lines. Not technically needed when defining a dictionary or list" ] }, { "cell_type": "code", "collapsed": true, "input": [ "phone_numbers = {'family': [('mom','642-2322'),('dad','534-2311')],\\", " 'friends': [('Billy','652-2212')]}" ], "language": "python", "outputs": [], "prompt_number": 79 }, { "cell_type": "code", "collapsed": false, "input": [ "for group_type in ['friends','family']:", " print \"Group \" + group_type + \":\"", " for info in phone_numbers[group_type]:", " print \" \",info[0], info[1]" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Group friends:", " Billy 652-2212", "Group family:", " mom 642-2322", " dad 534-2311" ] } ], "prompt_number": 80 }, { "cell_type": "code", "collapsed": false, "input": [ "# this will return a list, but you dont know in what order! ", "phone_numbers.keys()" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 81, "text": [ "['friends', 'family']" ] } ], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "phone_numbers.values()" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 82, "text": [ "[[('Billy', '652-2212')], [('mom', '642-2322'), ('dad', '534-2311')]]" ] } ], "prompt_number": 82 }, { "cell_type": "markdown", "source": [ "`.keys()` and `.values()`: are called `methods` on dictionaries" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for group_type in phone_numbers.keys():", " print \"Group \" + group_type + \":\"", " for info in phone_numbers[group_type]:", " print \" \",info[0], info[1]" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Group friends:", " Billy 652-2212", "Group family:", " mom 642-2322", " dad 534-2311" ] } ], "prompt_number": 83 }, { "cell_type": "markdown", "source": [ "we cannot ensure ordering here of the groups" ] }, { "cell_type": "code", "collapsed": false, "input": [ "groups = phone_numbers.keys()", "groups.sort()", "for group_type in groups:", " print \"Group \" + group_type + \":\"", " for info in phone_numbers[group_type]:", " print \" \",info[0], info[1]" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Group family:", " mom 642-2322", " dad 534-2311", "Group friends:", " Billy 652-2212" ] } ], "prompt_number": 84 }, { "cell_type": "markdown", "source": [ "`.iteritems()` is a handy method,", "returning key,value pairs with each iteration" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for group_type, vals in phone_numbers.iteritems():", " print \"Group \" + group_type + \":\"", " for info in vals:", " print \" \",info[0], info[1]" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Group friends:", " Billy 652-2212", "Group family:", " mom 642-2322", " dad 534-2311" ] } ], "prompt_number": 85 }, { "cell_type": "markdown", "source": [ "Some examples of getting values:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "phone_numbers['co-workers']" ], "language": "python", "outputs": [ { "ename": "KeyError", "evalue": "'co-workers'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/Users/jbloom/Classes/python-bootcamp/DataFiles_and_Notebooks/02_AdvancedDataStructures/\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mphone_numbers\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'co-workers'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mKeyError\u001b[0m: 'co-workers'" ] } ], "prompt_number": 86 }, { "cell_type": "code", "collapsed": false, "input": [ "phone_numbers.has_key('co-workers')" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 87, "text": [ "False" ] } ], "prompt_number": 87 }, { "cell_type": "code", "collapsed": false, "input": [ "print phone_numbers.get('co-workers')" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "None" ] } ], "prompt_number": 88 }, { "cell_type": "code", "collapsed": false, "input": [ "phone_numbers.get('friends') == phone_numbers['friends']" ], "language": "python", "outputs": [ { "output_type": "pyout", "prompt_number": 89, "text": [ "True" ] } ], "prompt_number": 89 }, { "cell_type": "code", "collapsed": false, "input": [ "print phone_numbers.get('co-workers',\"all alone\")" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "all alone" ] } ], "prompt_number": 90 }, { "cell_type": "markdown", "source": [ "#### setting values ####", "", "you can edit the values of keys and also `.pop()` & `del` to remove certain keys" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# add to the friends list", "phone_numbers['friends'].append((\"Marsha\",\"232-1121\"))", "print phone_numbers" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{'friends': [('Billy', '652-2212'), ('Marsha', '232-1121')], 'family': [('mom', '642-2322'), ('dad', '534-2311')]}" ] } ], "prompt_number": 91 }, { "cell_type": "code", "collapsed": false, "input": [ "## billy's number changed", "phone_numbers['friends'][0][1] = \"532-1521\"" ], "language": "python", "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/Users/jbloom/Classes/python-bootcamp/DataFiles_and_Notebooks/02_AdvancedDataStructures/\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m## billy's number changed\u001b[0m\n\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mphone_numbers\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'friends'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"532-1521\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "prompt_number": 92 }, { "cell_type": "code", "collapsed": true, "input": [ "phone_numbers['friends'][0] = (\"Billy\",\"532-1521\")" ], "language": "python", "outputs": [], "prompt_number": 93 }, { "cell_type": "code", "collapsed": true, "input": [ "## I lost all my friends preparing for this Python class", "phone_numbers['friends'] = [] # sets this to an empty list" ], "language": "python", "outputs": [], "prompt_number": 94 }, { "cell_type": "code", "collapsed": false, "input": [ "## remove the friends key altogether", "print phone_numbers.pop('friends')" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[]" ] } ], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "print phone_numbers" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{'family': [('mom', '642-2322'), ('dad', '534-2311')]}" ] } ], "prompt_number": 96 }, { "cell_type": "code", "collapsed": true, "input": [ "del phone_numbers['family']" ], "language": "python", "outputs": [], "prompt_number": 97 }, { "cell_type": "code", "collapsed": false, "input": [ "print phone_numbers" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{}" ] } ], "prompt_number": 98 }, { "cell_type": "markdown", "source": [ "`.update()` method is very handy, like `.append()` for lists" ] }, { "cell_type": "code", "collapsed": false, "input": [ "phone_numbers.update({\"friends\": [(\"Billy's Brother, Bob\", \"532-1521\")]})", "print phone_numbers" ], "language": "python", "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{'friends': [(\"Billy's Brother, Bob\", '532-1521')]}" ] } ], "prompt_number": 99 }, { "cell_type": "markdown", "source": [ "[back]" ] }, { "cell_type": "code", "collapsed": true, "input": [], "language": "python", "outputs": [] } ] } ] }