{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Slovníky -- dict()\n", "\n", "Tento datový typ implementuje tzv. [asociativní pole](https://cs.wikipedia.org/wiki/Asociativn%C3%AD_pole). Položky v kolekci nejsou indexovány pomocí celočíselných indexů, ale pomocí klíčů.\n", "Klíčem může být některý s neměnitelných datových typů. Datový type `dict` je\n", "ale **měnitelný**.\n", "\n", "Zapisuje se do složených závorek `{}` vždy jako dvojice `klíč:hodnota`.\n", "Pokud je při přiřazení použit klíč, který neexistuje vytvoří se." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{1: 'ahoj', 'neco': 3.14, 'slovo': 1}" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d = {1: 'ahoj', 'neco': 3.14, 'slovo': 1}\n", "d" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{1: 'ahoj', 'neco': 3.14, 'slovo': 1}" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d = {}\n", "d['slovo'] = 1\n", "d['neco'] = 3.14\n", "d[1] = 'ahoj'\n", "d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Slovník `dict()` podporuje operátor příslušnosti `in`, počet prvků lze zjistit pomocí funkce `len()` a slovníky mezi sebou lze porovnat pomocí operátorů `==` a `!=`.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d = {1: 'ahoj', 'cislo': 3.14}\n", "len(d)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "3.14 in d" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'cislo' in d" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "{1: 'ahoj', 'cislo': 3.14} == {1: 'ahoj', 'cislo': 3.14}" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "{2: 'ahoj', 'cislo': 3.14} == {1: 'ahoj', 'cislo': 3.14}" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "{1: 'ahojjj', 'cislo': 3.14} == {1: 'ahoj', 'cislo': 3.14}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Slovníky lze procházet. Stejně jako při testování pomocí `in` se prochází *klíče*, nikoli hodnoty.\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "cislo\n" ] } ], "source": [ "for k in {1: 'ahojjj', 'cislo': 3.14}:\n", " print(k)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* **Spojování slovníků** se děje pomocí metody `.updte()` nebo pomocí funkce `dict()`." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'a': 123, 'b': 985, 'jmeno': 'Karel', 'prijmeni': 'Novak'}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d1 = {'a': 123, 'b': 985}\n", "dict(d1, jmeno='Karel', prijmeni='Novak')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nebo lze použít operátor `**`, který slovník rozbalí." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'a': 123, 'b': 985, 'jmeno': 'Karel', 'prijmeni': 'Novak'}" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d1 = {'a': 123, 'b': 985}\n", "d2 = {'jmeno': 'Karel', 'prijmeni':'Novak'}\n", "dict(d1, **d2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "další možnost:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "d1 = {'a': 123, 'b': 985}\n", "d2 = {'jmeno': 'Karel', 'prijmeni':'Novak'}\n", "d = {}" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'a': 123, 'b': 985}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.update(d1)\n", "d" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'a': 123, 'b': 985, 'jmeno': 'Karel', 'prijmeni': 'Novak'}" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.update(d2)\n", "d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Některé zajímavé metody\n", "\n", "metoda |\n", ":------|:-------\n", "`d.has_key(k)` | Vrátí `True` nebo `False` pokud slovník `d` obsahuje nebo neobsahuje klíč `k`.\n", "`d.keys()` | Vrátí pohled tvořený všemi klíči.\n", "`d.values()` | Vrátí pohled tvořený všemi hodnotami.\n", "`d.items()` | Vrátí pohled tvořený všemi dvojicemi `(klíč,hodnota)`.\n", "`d.get(k)` | Vrátí hodnotu spojenou s klíčem `k` nebo `None` pokud klíč neexistuje.\n", "`d.get(k,v)` | Vrátí hodnotu spojenou s klíčem `k` nebo `v` pokud klíč neexistuje.\n", "`d.popitem()` | Odstraní náhodnou položku/hodnotu a vrátí ji jako *pohled*.\n", "`d.pop(k)` | Odstraní položku spojenou s klíčem `k` a vrátí její hodnotu.\n", "`d.pop(k,v)` |Odstraní položku spojenou s klíčem `k` a vrátí její hodnotu. Pokud klíč neexistuje vrátí `v`." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{1: 'ahoj', 2: 'nazdar', 'cislo': 3.14, 'jmeno': 'Karel'}" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d={}\n", "d['cislo']=3.14\n", "d['jmeno']='Karel'\n", "d[1]='ahoj'\n", "d[2]='nazdar'\n", "d" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "dict_values(['Karel', 'ahoj', 'nazdar', 3.14])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.values()" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "dict_keys(['jmeno', 1, 2, 'cislo'])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.keys()" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "dict_items([('jmeno', 'Karel'), (1, 'ahoj'), (2, 'nazdar'), ('cislo', 3.14)])" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.items()" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "jmeno : Karel\n", "1 : ahoj\n", "2 : nazdar\n", "cislo : 3.14\n" ] } ], "source": [ "for klic, hodnota in d.items():\n", " print(klic, \":\", hodnota)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'Karel'" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.get('jmeno')" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": true }, "outputs": [], "source": [ "d.get('HogoFogo')" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "59" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.get('HogoFogo',59)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{1: 'ahoj', 2: 'nazdar', 'cislo': 3.14, 'jmeno': 'Karel'}" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'nazdar'" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.pop(2)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{1: 'ahoj', 'cislo': 3.14, 'jmeno': 'Karel'}" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'neni tu'" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.pop(777,'neni tu')" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "('jmeno', 'Karel')" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.popitem()" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{1: 'ahoj', 'cislo': 3.14}" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(1, 'ahoj')" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d.popitem()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "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.5.3" } }, "nbformat": 4, "nbformat_minor": 2 }