{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 1\n", "Dicts are unordered. So the \"sensor-B\" dictionary may appear before the \"senor-A\" dictionary when printed." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'sensor-A': [192, 4, 1, 54], 'sensor-B': [228, 147, 61, 84]}\n", "{'sensor-A': [33], 'sensor-B': [48, 41, 910]}\n", "{'sensor-A': [292, 12, 84, 991], 'sensor-B': [28901]}\n" ] } ], "source": [ "chz_dict = {\"sensor-A\": [192, 4, 1, 54], \"sensor-B\": [228, 147, 61, 84]}\n", "rxj_dict = {\"sensor-A\": [33], \"sensor-B\": [48, 41, 910]}\n", "amp_dict = {\"sensor-A\": [292, 12, 84, 991], \"sensor-B\": [28901]}\n", "print(chz_dict)\n", "print(rxj_dict)\n", "print(amp_dict)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 2 and 3" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'sensor-A': [33, 55, 21], 'sensor-B': [48, 41, 910]}\n", "{'sensor-A': [292, 12, 94, 991], 'sensor-B': [28901]}\n" ] } ], "source": [ "rxj_dict[\"sensor-A\"] += [55, 21];\n", "print(rxj_dict)\n", "amp_dict[\"sensor-A\"][2] = 94;\n", "print(amp_dict)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 4" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'AMP': {'sensor-A': [292, 12, 94, 991], 'sensor-B': [28901]},\n", " 'CHZ': {'sensor-A': [192, 4, 1, 54], 'sensor-B': [228, 147, 71, 94]},\n", " 'RXJ': {'sensor-A': [33, 55, 21], 'sensor-B': [48, 41, 910]}}" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dut_dict = {}\n", "dut_dict[\"CHZ\"] = chz_dict\n", "dut_dict[\"RXJ\"] = rxj_dict\n", "dut_dict[\"AMP\"] = amp_dict\n", "dut_dict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 5\n", "Note that the dictionary just points to the chz_dict object which contains the list object to be changed. No data copying occurred." ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'AMP': {'sensor-A': [292, 12, 94, 991], 'sensor-B': [28901]},\n", " 'CHZ': {'sensor-A': [192, 4, 1, 54], 'sensor-B': [228, 147, 71, 94]},\n", " 'RXJ': {'sensor-A': [33, 55, 21], 'sensor-B': [48, 41, 910]}}" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dut_dict[\"CHZ\"][\"sensor-B\"][2:4] = [71,94]\n", "dut_dict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 6\n", "As usual there are a couple of ways to do this.\n", "Standard loops in loops" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "28901\n", "1\n", "32189\n", "19\n" ] } ], "source": [ "dict_list = []\n", "for dut in dut_dict.values() :\n", " for other_it in (list(dut.values())) : \n", " dict_list += other_it\n", "print (max(dict_list))\n", "print (min(dict_list))\n", "print (sum(dict_list))\n", "print (len(dict_list))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or using fancy pants comprehensions" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "28901\n", "1\n", "32189\n", "19\n" ] } ], "source": [ "all_samples = [sample for sensors in dut_dict.values() for samples in sensors.values() for sample in samples]\n", "print (max(all_samples))\n", "print (min(all_samples))\n", "print (sum(all_samples))\n", "print (len(all_samples))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 7\n", "Dicts can be trickier to work with when working with the values and not the keys. It's easier to check the list from 6 (yes its cheating)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'AMP': {'sensor-A': [292, 12, 94, 991], 'sensor-B': [28901]},\n", " 'CHZ': {'sensor-A': [192, 4, 1, 54], 'sensor-B': [228, 147, 71, 94]},\n", " 'RXJ': {'sensor-A': [33, 55, 21], 'sensor-B': [48, 41, 910]}}" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dut_dict" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "True\n" ] } ], "source": [ "found = False\n", "all_samples = [sample for sensors in dut_dict.values() for samples in sensors.values() for sample in samples]\n", "found = 71 in all_samples\n", "print (found)\n", "\n", "found = False\n", "for sensors in dut_dict.values() :\n", " for samples in sensors.values() : \n", " found = found or 71 in samples\n", "print (found)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 8" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "True\n" ] } ], "source": [ "found = False\n", "all_samples = [sample for sensors in dut_dict.values() for samples in sensors.values() for sample in samples]\n", "found = 60 not in dict_list\n", "print (found)\n", "\n", "found = False\n", "for sensors in dut_dict.values() :\n", " for samples in sensors.values() : \n", " found = found or 60 not in samples\n", "print (found)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 9" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "1\n" ] } ], "source": [ "count = 0\n", "all_samples = [sample for sensors in dut_dict.values() for samples in sensors.values() for sample in samples]\n", "count = all_samples.count(228)\n", "print (count)\n", "\n", "count = 0\n", "dict_list = []\n", "for sensors in dut_dict.values() :\n", " for samples in sensors.values() : \n", " count += samples.count(228)\n", "print (count)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 10\n", "Note again the underlying lists are changed not copies in the dictionary" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'AMP': {'sensor-A': [12, 94, 292, 991], 'sensor-B': [28901]},\n", " 'CHZ': {'sensor-A': [1, 4, 54, 192], 'sensor-B': [71, 94, 147, 228]},\n", " 'RXJ': {'sensor-A': [21, 33, 55], 'sensor-B': [41, 48, 910]}}" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for sensors in dut_dict.values() :\n", " for samples in sensors.values() : \n", " # Remember the value of the inner dict is a list so indexing and list functions are OK!\n", " samples.sort()\n", "dut_dict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 11\n", "Easy peasy lemon squeezy. Not that there's no point inserting at the beginning or end. Dicts are unordered and its up to the compiler to do it " ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'AMP': {'sensor-A': [12, 94, 292, 991], 'sensor-B': [28901]},\n", " 'BMX': {'sensor-A': [1, 4, 6, 735], 'sensor-B': [12, 135, 2462]},\n", " 'CHZ': {'sensor-A': [1, 4, 54, 192], 'sensor-B': [71, 94, 147, 228]},\n", " 'QRT': {'sensor-A': [2, 31, 52, 85], 'sensor-B': [899, 900, 901]},\n", " 'RXJ': {'sensor-A': [21, 33, 55], 'sensor-B': [41, 48, 910]}}" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dut_dict[\"BMX\"] = {\"sensor-A\": [1, 4, 6, 735], \"sensor-B\": [12, 135, 2462]}\n", "dut_dict[\"QRT\"] = {\"sensor-A\": [2, 31, 52, 85], \"sensor-B\": [899, 900, 901]}\n", "dut_dict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 12" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'BMX': {'sensor-A': [1, 4, 6, 735], 'sensor-B': [12, 135, 2462]},\n", " 'CHZ': {'sensor-A': [1, 4, 54, 192], 'sensor-B': [71, 94, 147, 228]},\n", " 'QRT': {'sensor-A': [2, 31, 52, 85], 'sensor-B': [899, 900, 901]},\n", " 'RXJ': {'sensor-A': [21, 33, 55], 'sensor-B': [41, 48, 910]}}" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dut_dict.pop(\"AMP\")\n", "dut_dict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Answer 13\n", "This is just a call to dict.keys(). Handy for iterating (except dicts already have a built-in iterator). NOTE that dict.keys() returns an ITERATOR. The list constructor can use the iterator to produce an actual list." ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dict_keys(['QRT', 'RXJ', 'CHZ', 'BMX'])\n" ] }, { "data": { "text/plain": [ "['QRT', 'RXJ', 'CHZ', 'BMX']" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(dut_dict.keys())\n", "list(dut_dict.keys())" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.6" } }, "nbformat": 4, "nbformat_minor": 2 }