{ "metadata": { "language": "Julia", "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#5. PLEAC Julia: Dictionaries\n", "\n", "[PLEAC = Language Examples Alike Cookbook](http://pleac.sourceforge.net/)\n", "PLEAC examples are drawn from the \"Perl Cookbook\" by Tom Christiansen & Nathan Torkington, published by O'Reilly. They provide a nice range of examples oriented toward data munging, the type of work I tend to want to do first when learning a new language.\n", "\n", "\n", "The Julia examples below are principally translations from the [Python version](http://pleac.sourceforge.net/pleac_python/)\n", "\n", "###A Caution\n", "I'm learning as I go, so the code below probably doesn't represent best practice. Your suggestions are welcome! \n", "Please file an issue or make a pull request to the [github repo](https://github.com/catawbasam/IJulia_PLEAC/).\n", "\n", "The examples are not complete. Missing items are generally noted in comments." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.0: Introduction" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#Dict of Any\n", "age = {\"Nat\"=> 24, \"Jules\"=> 24, \"Josh\"=> 17}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "{\"Jules\"=>24,\"Josh\"=>17,\"Nat\"=>24}" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "#typed Dict-- the type will be inferred\n", "age = [\"Nat\"=> 24, \"Jules\"=> 24, \"Josh\"=> 17]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "[\"Jules\"=>24,\"Josh\"=>17,\"Nat\"=>24]" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "age=Dict()\n", "age[\"Nat\"] = 24\n", "age[\"Jules\"] = 25\n", "age[\"Josh\"] = 17" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "17" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "#in Julia, keys can be Symbols\n", "food_color = [:Apple => \"red\",\n", " :Banana=> \"yellow\",\n", " :Lemon => \"yellow\",\n", " :Carrot=> \"orange\"\n", " ]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "[:Apple=>\"red\",:Carrot=>\"orange\",:Lemon=>\"yellow\",:Banana=>\"yellow\"]" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.1: Adding an element to a Dict" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# food_color defined per the introduction\n", "food_color[:Raspberry] = \"pink\"\n", "print( \"Known foods:\" )\n", "for food in food_color\n", " print( food )\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Known foods:" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "(:Apple," ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\"red\")(:Raspberry,\"pink\")(:Carrot,\"orange\")(:Lemon,\"yellow\")(:Banana,\"yellow\")" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.2: Testing for the presence of a key in a Dict\n", "\n", "does dict have a value for key?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "key = \"Joe\"\n", "haskey(age,key)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "false" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "key=\"Nat\"\n", "haskey(age,key)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "true" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "# food_color per the introduction\n", "for name in (:Banana, :Martini)\n", " if name in keys(food_color)\n", " println(\"$name is a food.\")\n", " else\n", " println( \"$name is a drink.\")\n", " end\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Banana is a food." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Martini is a drink.\n" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "age = Dict()\n", "age[\"Toddler\"] = 3\n", "age[\"Unborn\"] = 0\n", "age[\"Phantasm\"] = None" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "None" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "thing=\"Toddler\"\n", "thing ==Nothing" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "false" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "for thing in (\"Toddler\", \"Unborn\", \"Phantasm\", \"Relic\")\n", " print(\"\\n$thing: \")\n", " if haskey(age, thing)\n", " print( \"Exists \")\n", " if age[thing] != None\n", " print(\" Defined\")\n", " end\n", " if age[thing]==true\n", " print( \" true\")\n", " end\n", " end\n", " #println()\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Toddler: " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Exists Defined\n", "Unborn: Exists Defined\n", "Phantasm: Exists \n", "Relic: " ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "#SKIP\n", "# Get file sizes for the requested filenames\n", "\"\"\"\n", "import fileinput, os\n", "size = {}\n", "for line in fileinput.input():\n", " filename = line.rstrip()\n", " if filename in size:\n", " continue\n", " size[filename] = os.path.getsize(filename)\n", "\"\"\";" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.3: Delete from a Dict\n", "\n", "remove key and value from dict" ] }, { "cell_type": "code", "collapsed": false, "input": [ "delete!(age, \"Nat\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "{\"Toddler\"=>3,\"Unborn\"=>0,\"Phantasm\"=>None}" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "foodstr = {\"carrot\"=>\"orange\", \"lemon\"=>\"yellow\", \n", " \"apple\"=>\"green\", \"banana\"=>\"yellow\"}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "{\"apple\"=>\"green\",\"carrot\"=>\"orange\",\"lemon\"=>\"yellow\",\"banana\"=>\"yellow\"}" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "function print_foods()\n", " foods = keys(foodstr)\n", " println(\"Keys: $(join(foods,' '))\")\n", " println(\"Values: $( join(values(foodstr),' ') )\")\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "print_foods (generic function with 1 method)" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"Initially:\")\n", "print_foods()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Initially:" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Keys: apple carrot lemon banana\n", "Values: green orange yellow yellow\n" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"\\nWith banana set to nothing\")\n", "foodstr[\"banana\"]=None # works for Dict{String,Any}. for typed Dict, would need a Union(T,None)\n", "print_foods()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "With banana set to nothing" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Keys: apple carrot lemon banana\n", "Values: green orange yellow None\n" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "println(\"\\nWith banana deleted\")\n", "delete!( foodstr, \"banana\" )\n", "print_foods()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "With banana deleted" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Keys: apple carrot lemon\n", "Values: green orange yellow\n" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "for key in [\"Banana\", \"apple\", \"Cabbage\"] \n", " delete!(foodstr,key) #delete!() does not mind getting non-existant keys\n", "end\n", "foodstr" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "{\"carrot\"=>\"orange\",\"lemon\"=>\"yellow\"}" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.4: Traversing a Dict" ] }, { "cell_type": "code", "collapsed": false, "input": [ "foodstr = {\"carrot\"=>\"orange\", \"lemon\"=>\"yellow\", \n", " \"apple\"=>\"green\", \"banana\"=>\"yellow\"}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "{\"apple\"=>\"green\",\"carrot\"=>\"orange\",\"lemon\"=>\"yellow\",\"banana\"=>\"yellow\"}" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "for k in keys(foodstr)\n", " println(\"$k $(foodstr[k])\")\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "apple green" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "carrot orange\n", "lemon yellow\n", "banana yellow\n" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "for (k,v) in collect(foodstr)\n", " println(\"$k $v\")\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "apple green" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "carrot orange\n", "lemon yellow\n", "banana yellow\n" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "for (k,v) in sort(collect(foodstr))\n", " println(\"$k $v\")\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "apple green" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "banana yellow\n", "carrot orange\n", "lemon yellow\n" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "text = \"\"\"From: Jo\n", "To: Jim\n", "From: Jane\n", "\"\"\"\n", "infile = IOBuffer(text)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "IOBuffer([0x46,0x72,0x6f,0x6d,0x3a,0x20,0x4a,0x6f,0x0a,0x54 \u2026 0x72,0x6f,0x6d,0x3a,0x20,0x4a,0x61,0x6e,0x65,0x0a],true,false,true,false,28,9223372036854775807,1)" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "counts = Dict()\n", "for line in readlines(infile)\n", " if line[1:6]==\"From: \"\n", " name=chomp(line[7:end])\n", " counts[name] = get(counts,name,0)+1\n", " end\n", "end" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "for (name, count) in collect(counts)\n", " println(\"$name $count\")\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Jo 1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Jane 1\n" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.5: Printing a Dict" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for (name, count) in collect(counts)\n", " println(\"$name => $count\")\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Jo => 1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Jane => 1\n" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "join([\"$k => $v\" for (k,v) in collect(counts)],'\\n')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ "\"Jo => 1\\nJane => 1\"" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "print(counts)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\"Jo\"=>1,\"Jane\"=>1}" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "show(counts)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\"Jo\"=>1,\"Jane\"=>1}" ] } ], "prompt_number": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.6: Retrieving from a Dict in Insertion Order" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#install OrderedCollections.jl ?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "# @@INCOMPLETE@" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.7: Dicts with multiple values per key" ] }, { "cell_type": "code", "collapsed": false, "input": [ "LOAD_PATH" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "2-element Array{Union(ASCIIString,UTF8String),1}:\n", " \"C:\\\\Temp\\\\julia-rc4\\\\local\\\\share\\\\julia\\\\site\\\\v0.2\"\n", " \"C:\\\\Temp\\\\julia-rc4\\\\share\\\\julia\\\\site\\\\v0.2\" " ] } ], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "multfood = [\"carrot\"=>[\"orange\",\"green\"], \n", " \"lemon\"=>[\"yellow\",\"brown\"], \n", " \"apple\"=>[\"green\",\"red\"], \n", " \"banana\"=>[\"yellow\",\"brown\"] \n", " ]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ "[\"apple\"=>[\"green\",\"red\"],\"carrot\"=>[\"orange\",\"green\"],\"lemon\"=>[\"yellow\",\"brown\"],\"banana\"=>[\"yellow\",\"brown\"]]" ] } ], "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.8: Inverting a Dict" ] }, { "cell_type": "code", "collapsed": false, "input": [ "{v=>k for (k,v) in [(1,2),(3,4)]}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 33, "text": [ "{4=>3,2=>1}" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "surname = {\"Mickey\"=>\"Mantle\", \"Babe\"=>\"Ruth\"}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "{\"Babe\"=>\"Ruth\",\"Mickey\"=>\"Mantle\"}" ] } ], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "first_name = {v=>k for (k,v) in collect(surname)}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ "{\"Ruth\"=>\"Babe\",\"Mantle\"=>\"Mickey\"}" ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "print(first_name[\"Mantle\"])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Mickey" ] } ], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "color_dict = {\"Apple\"=> \"red\",\n", " \"Banana\"=> \"yellow\",\n", " \"Lemon\"=> \"yellow\",\n", " \"Carrot\"=> \"orange\",\n", " }" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "{\"Banana\"=>\"yellow\",\"Lemon\"=>\"yellow\",\"Carrot\"=>\"orange\",\"Apple\"=>\"red\"}" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "food_dict = {v=>k for (k,v) in collect(color_dict)}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 42, "text": [ "{\"orange\"=>\"Carrot\",\"red\"=>\"Apple\",\"yellow\"=>\"Lemon\"}" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "given = \"Apple\"\n", "if given in keys(color_dict)\n", " println(\"$given is a food with color $(color_dict[given])\")\n", "elseif given in keys(food_dict)\n", " println(\"$(color_dict[given]) is a food with color $given \")\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Apple is a food with color red" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 46 }, { "cell_type": "code", "collapsed": false, "input": [ "food_color" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 50, "text": [ "[:Apple=>\"red\",:Raspberry=>\"pink\",:Carrot=>\"orange\",:Lemon=>\"yellow\",:Banana=>\"yellow\"]" ] } ], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "foods_with_color=Dict()\n", "for (food,color) in color_dict\n", " if haskey(foods_with_color,color)\n", " push!(foods_with_color[color], food)\n", " else\n", " foods_with_color[color] = [food]\n", " end\n", "end\n", "foods_with_color" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 53, "text": [ "{\"orange\"=>[\"Carrot\"],\"red\"=>[\"Apple\"],\"yellow\"=>[\"Banana\",\"Lemon\"]}" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "println( join(foods_with_color[\"yellow\"], ' '), \" were yellow foods.\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Banana Lemon" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " were yellow foods.\n" ] } ], "prompt_number": 57 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### PLEAC 5.9: Sorting a Dictionary" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for (f,c) in sort(collect(color_dict))\n", " println(f,\" is \",c)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Apple" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " is red\n", "Banana is yellow\n", "Carrot is orange\n", "Lemon is yellow\n" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "function compare_length(x,y)\n", " return length(string(x))<length(string(y))\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 73, "text": [ "compare_length (generic function with 1 method)" ] } ], "prompt_number": 73 }, { "cell_type": "code", "collapsed": false, "input": [ "for k in sort(collect(keys(color_dict)),lt=compare_length)\n", " println(k,\" is \",color_dict[k])\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Lemon" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " is yellow\n", "Apple is red\n", "Banana is yellow\n", "Carrot is orange\n" ] } ], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "collect(keys(color_dict))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 76, "text": [ "4-element Array{Any,1}:\n", " \"Banana\"\n", " \"Lemon\" \n", " \"Carrot\"\n", " \"Apple\" " ] } ], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "for k in sort(collect(keys(color_dict)), by=length, rev=true)\n", " println(k,\" is \",color_dict[k])\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Banana" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " is yellow\n", "Carrot is orange\n", "Lemon is yellow\n", "Apple is red\n" ] } ], "prompt_number": 79 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.10: Merging Dictionaries" ] }, { "cell_type": "code", "collapsed": false, "input": [ "d1 = Dict((1,2,3),(4,5,6))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 89, "text": [ "[2=>5,3=>6,1=>4]" ] } ], "prompt_number": 89 }, { "cell_type": "code", "collapsed": false, "input": [ "d2 = Dict((1,4),(7,8))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 90, "text": [ "[4=>8,1=>7]" ] } ], "prompt_number": 90 }, { "cell_type": "code", "collapsed": false, "input": [ "merge(d1,d2) #where a key is shared between d1 and d2, the result keeps the key-value pair from d2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 92, "text": [ "[4=>8,2=>5,3=>6,1=>7]" ] } ], "prompt_number": 92 }, { "cell_type": "code", "collapsed": false, "input": [ "# food_color as per section 5.8\n", "drink_color = {\"Galliano\"=> \"yellow\",\n", " \"Mai Tai\"=> \"blue\"}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 93, "text": [ "{\"Galliano\"=>\"yellow\",\"Mai Tai\"=>\"blue\"}" ] } ], "prompt_number": 93 }, { "cell_type": "code", "collapsed": false, "input": [ "ingested_color = copy(drink_color)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 95, "text": [ "{\"Galliano\"=>\"yellow\",\"Mai Tai\"=>\"blue\"}" ] } ], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "merge!(ingested_color, food_color)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 96, "text": [ "{:Apple=>\"red\",:Raspberry=>\"pink\",:Carrot=>\"orange\",\"Galliano\"=>\"yellow\",\"Mai Tai\"=>\"blue\",:Lemon=>\"yellow\",:Banana=>\"yellow\"}" ] } ], "prompt_number": 96 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.11: Finding Common or Different Keys in Two Dictionaries" ] }, { "cell_type": "code", "collapsed": false, "input": [ "common = [k for k in intersect(keys(d1),keys(d2))]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 98, "text": [ "1-element Array{Any,1}:\n", " 1" ] } ], "prompt_number": 98 }, { "cell_type": "code", "collapsed": false, "input": [ "this_not_that = [(k,d1[k]) for k in setdiff(keys(d1),keys(d2))]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 101, "text": [ "2-element Array{(Any,Any),1}:\n", " (2,5)\n", " (3,6)" ] } ], "prompt_number": 101 }, { "cell_type": "code", "collapsed": false, "input": [ "# citrus_color is a dict mapping citrus food name to its color.\n", "citrus_color = {\"Lemon\"=> \"yellow\",\n", " \"Orange\"=> \"orange\",\n", " \"Lime\"=> \"green\"}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 102, "text": [ "{\"Lime\"=>\"green\",\"Lemon\"=>\"yellow\",\"Orange\"=>\"orange\"}" ] } ], "prompt_number": 102 }, { "cell_type": "code", "collapsed": false, "input": [ "# build up a list of non-citrus foods\n", "non_citrus = [ (k,color_dict[k]) for k in setdiff(keys(color_dict),keys(citrus_color)) ]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 105, "text": [ "3-element Array{(Any,Any),1}:\n", " (\"Banana\",\"yellow\")\n", " (\"Carrot\",\"orange\")\n", " (\"Apple\",\"red\") " ] } ], "prompt_number": 105 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.12: Dictionary references" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# @@INCOMPLETE@" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 106 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.13: Presizing a dictionary" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mydict = Dict()\n", "sizehint(mydict, 100)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 107, "text": [ "Dict{Any,Any}()" ] } ], "prompt_number": 107 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.14: Finding the most common anything" ] }, { "cell_type": "code", "collapsed": false, "input": [ "myarray = [1,2,4,5,3,4,7,8,4,3,2,5,5,7,8]\n", "count = Dict()\n", "for element in myarray\n", " count[element] = get(count,element, 0) + 1\n", "end\n", "count" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 114, "text": [ "{5=>3,4=>3,7=>2,2=>2,8=>2,3=>2,1=>1}" ] } ], "prompt_number": 114 }, { "cell_type": "code", "collapsed": false, "input": [ "for element in myarray\n", " print(element)\n", "end" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "24534784325578" ] } ], "prompt_number": 110 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.15: Representing Relationships Between Data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "father = {\"Cain\"=> \"Adam\",\n", " \"Abel\"=> \"Adam\",\n", " \"Seth\"=> \"Adam\",\n", " \"Enoch\"=> \"Cain\",\n", " \"Irad\"=> \"Enoch\",\n", " \"Mehujael\"=> \"Irad\",\n", " \"Methusael\"=> \"Mehujael\",\n", " \"Lamech\"=> \"Methusael\",\n", " \"Jabal\"=> \"Lamech\",\n", " \"Tubalcain\"=> \"Lamech\",\n", " \"Enos\"=> \"Seth\",\n", " }" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 116, "text": [ "{\"Methusael\"=>\"Mehujael\",\"Irad\"=>\"Enoch\",\"Mehujael\"=>\"Irad\",\"Lamech\"=>\"Methusael\",\"Enos\"=>\"Seth\",\"Tubalcain\"=>\"Lamech\",\"Abel\"=>\"Adam\",\"Enoch\"=>\"Cain\",\"Jabal\"=>\"Lamech\",\"Seth\"=>\"Adam\",\"Cain\"=>\"Adam\"}" ] } ], "prompt_number": 116 }, { "cell_type": "code", "collapsed": false, "input": [ "#SKIP fileinput stuff\n", "# @@INCOMPLETE@" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 117 }, { "cell_type": "code", "collapsed": false, "input": [ "children=Dict()\n", "for (k, v) in collect(father)\n", " if haskey(children,v)\n", " push!(children[v],k)\n", " else\n", " children[v]=[k]\n", " end\n", "end\n", "children" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 127, "text": [ "{\"Methusael\"=>[\"Lamech\"],\"Irad\"=>[\"Mehujael\"],\"Adam\"=>[\"Abel\",\"Seth\",\"Cain\"],\"Mehujael\"=>[\"Methusael\"],\"Lamech\"=>[\"Tubalcain\",\"Jabal\"],\"Enoch\"=>[\"Irad\"],\"Seth\"=>[\"Enos\"],\"Cain\"=>[\"Enoch\"]}" ] } ], "prompt_number": 127 }, { "cell_type": "code", "collapsed": false, "input": [ "dd=Dict()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 118, "text": [ "Dict{Any,Any}()" ] } ], "prompt_number": 118 }, { "cell_type": "code", "collapsed": false, "input": [ "# RE on filenames skipped\n", "# Will not implement\n", "# @@INCOMPLETE@" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 128 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###PLEAC 5.16: Program dutree" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Will not implment\n", "# @@INCOMPLETE@" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 129 }, { "cell_type": "code", "collapsed": false, "input": [ ";ipython nbconvert 5_pleac_dictionaries.ipynb" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "[NbConvertApp] Using existing profile dir: u'C:\\\\Users\\\\keithc\\\\.ipython\\\\profile_default'\r\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "[NbConvertApp] Converting notebook 5_pleac_dictionaries.ipynb to html\r\n", "[NbConvertApp] Support files will be in 5_pleac_dictionaries_files\\\r\n", "[NbConvertApp] Loaded template html_full.tpl\r\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "[NbConvertApp] Writing 268953 bytes to 5_pleac_dictionaries.html\r\n" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }