Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cs220-lecture-material
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
YE MOU
cs220-lecture-material
Commits
73760796
"...git@git.doit.wisc.edu:SABERG3/course-search-enroll-fe.git" did not exist on "088d69ef5395b46d0962b8697b329dbace03751e"
Commit
73760796
authored
2 years ago
by
Andy Kuemmel
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parent
0ca3d1c0
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
f22/andy_lec_notes/lec23_Oct31_Function_References/lec23_FunctionReferences_completed.ipynb
+756
-0
756 additions, 0 deletions
...ction_References/lec23_FunctionReferences_completed.ipynb
with
756 additions
and
0 deletions
f22/andy_lec_notes/lec23_Oct31_Function_References/lec23_FunctionReferences_completed.ipynb
0 → 100644
+
756
−
0
View file @
73760796
{
"cells": [
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# Warmup 1: dictionary from Friday's lecture"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'name': 'Andy',\n",
" 'age': 17,\n",
" 'family': {'spouse': 'Kathleen',\n",
" 'child1': {'name': 'Sam', 'age': 16, 'sport': 'soccer'},\n",
" 'child2': {'name': 'Stevie', 'age': 14, 'sport': 'fishing'}}}"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"person_info = { \"name\": \"Andy\", \n",
" \"age\": 17, \n",
" \"family\" : {\"spouse\": \"Kathleen\", \n",
" \"child1\": {\"name\": \"Sam\", \n",
" \"age\": 16, \"sport\": \"soccer\"}, \n",
" \"child2\": {\"name\":\"Stevie\", \n",
" \"age\": 14, \"sport\": \"fishing\"}\n",
" }\n",
" }\n",
"person_info"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"soccer\n"
]
}
],
"source": [
"def search_dict_recursive(target_key, some_dict):\n",
" ''' returns the Value associated with target_key if tarket_key in any level of some_dict, \n",
" None otherwise'''\n",
" for key in some_dict:\n",
" if key == target_key:\n",
" return some_dict[target_key]\n",
" elif type(some_dict[key]) == dict: # recursive case\n",
" return search_dict_recursive(target_key, some_dict[key])\n",
" return None\n",
"\n",
"print(search_dict_recursive(\"sport\", person_info))"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"# Warmup 2: Trace the above in Python Tutor\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Lecture 23: Functions are Objects!\n",
"\n",
"As we have learned previously, all variables in Python are stored as objects.\n",
"\n",
"This is also true for functions, and it gives us more power as programmers.\n",
"\n",
"**Learning Objectives:**\n",
"\n",
"- Define a function reference and trace code that uses function references.\n",
"- Explain the default use of sorted() on lists of tuples, and dictionaries.\n",
"- Sort a list of tuples, a list of dictionaries, or a dictionary using a function as a key.\n",
"- Use a lambda expression when sorting."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"# function references\n",
"# try this in Python Tutor\n",
"\n",
"x = [1,2,3]\n",
"y = x\n",
"\n",
"def f(thing): # what is f? its a function but also an object\n",
" return thing[-1]\n",
"\n",
"z = f(y) # z stores the result of a call to f\n",
"\n",
"g = f # what is g? it is a reference to an object that is a function\n",
"\n",
"# TODO: similar to line 10, store the result of a call to g\n",
"\n",
"w = g(x) # calls the same function\n"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3]\n",
"<function f at 0x7f7932640160>\n"
]
}
],
"source": [
"print(x)\n",
"print(f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Define a function reference and trace code that uses function references."
]
},
{
"attachments": {
"function%20reference.png": {
"image/png": "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eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY3MjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj41MDI8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KyigzMQAAQABJREFUeAHsvQecHbW5v69d914wxgYDS++9d9N77yHApV1ICNzwJwkpEEhIQpIbcj8phB/cwDW9995772B6NWDj3nvbvx6t313teOa0Pbvec/b7frw+c2YkjfRIM/rqlWZOTb03JxMBERABERABERABERCBNiJQ20bn0WlEQAREQAREQAREQAREIBCQAFVDEAEREAEREAEREAERaFMCEqBtilsnEwEREAEREAEREAERkABVGxABERABERABERABEWhTAhKgbYpbJxMBERABERABERABEZAAVRsQAREQAREQAREQARFoUwISoG2KWycTAREQAREQAREQARGQAFUbEAEREAEREAEREAERaFMCEqBtilsnEwEREAEREAEREAERkABVGxABERABERABERABEWhTAhKgbYpbJxMBERABERABERABEZAAVRsQAREQAREQAREQARFoUwISoG2KWycTAREQAREQAREQARGQAFUbEAEREAEREAEREAERaFMCEqBtilsnEwEREAEREAEREAERkABVGxABERABERABERABEWhTAhKgbYpbJxMBERABERABERABEZAAVRsQAREQAREQAREQARFoUwISoG2KWycTAREQAREQAREQARGQAFUbEAEREAEREAEREAERaFMCEqBtilsnEwEREAEREAEREAERkABVGxABERABERABERABEWhTAhKgbYpbJxMBERABERABERABEZAAVRsQAREQAREQAREQARFoUwISoG2KWycTAREQAREQAREQARGQAFUbEAEREAEREAEREAERaFMCEqBtilsnEwEREAEREAEREAERkABVGxABERABERABERABEWhTAhKgbYpbJxMBERABERABERABEZAAVRsQAREQAREQAREQARFoUwISoG2KWycTAREQAREQAREQARGQAFUbEAEREAEREAEREAERaFMCEqBtilsnEwEREAEREAEREAER6CwEHZfAqFGj3OWXX94MwKGHHuq22WabZvs6+pcFCxa4Cy64oBmGLbbYwh155JHN9umLCIiACIiACIhAYQQkQAvjVJWhvvjiC/enP/2pWdlWXXXVZS5A58+f76ZOneqWX355V1NT0yx/5fwye/ZsN2PGDDd48OCc50GAJjmdeOKJEqA5KoM6nDdvXmaITp06uZ49e2Yeb8kB6hSj7fTu3bslSbVaXNoejPr3799q52jLhBctWuQmTZrkevXqFf5a49xz5swJ1yvMunbtmnqKCRMmuC5durQKV87/3XffuR49erihQ4emnl87y0+gkHov/1mbUpw8eXK4lwwYMKBpp7bKQkACtCwYKzsRhMDTTz8dCoEAzbJvvvnG/eUvf3GvvvpqCHLZZZe5zTffPCt4Uftfeukld80117gHH3zQjR492i1evDgIlE022cT95je/cXvuuWdR6WUF/r//+z936623hjJwY8G6d+/uNtxwQ/fLX/7S4QFOGsetzP/4xz/cddddlwyi7wkCH3zwgXvuuecSe5u+9uvXz51wwglNO8q0NWvWLDdixIjG1M4666zG7WWxMXPmTPfpp5+6zTbbrPH0CPNrr73WMbA57LDD3EorrdR4rFI3pk+f7m655ZZwP9hhhx1apRiffPKJe/bZZ90hhxziVl555dRz3Hzzza6urs4deOCBqcdL3Ymwveuuu8Kgqm/fvo4BqKxtCMT1PmzYMMe9ZYUVVnCDBg1qkwzcf//9rra21n3/+99PPd9XX33l6uvr3WqrrZZ6XDuzCUiAZrPpMEf69Onjttpqq8zycgPAA4jwotM0wxtQLjv44IMdN3kzPGR4iRCme+21l/vv//5v95Of/MQOl/x50003ucceeyzEx0PWuXNnN3fu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bC8cSs2HBGgOct2HbeLW+WPuZ7SGnYjns7K9n/ayalBceeWVS71KhNfKsGi6WGNtJq+UMDMvo323T9bWlJK+xbepc77zJChPPacZT9ny2g6m9nn9B+XGe4ow5UnQrDWFrPOxV7EklwWknUf7REAEREAEREAEchOQAM3Np6qP8mqKpFjLWsxdCgje52e/JsFrS5iqaA2LBWiWyI3Py+J73sfIXyGG55VRrj3VSBxeVyITAREQAREQAREojYBew1QaN8UqgMAf//hH94tf/CI8nMR71njfW7kNLyvvkuN9kfy825133lnuUyg9ERABERABERCBMhOQB7TMQJVcEwFeMn3hhReGF8q3hvjkTDzBfu655waRm/WQUlOOtCUCIiACIiACItAeCMgD2h5qQXkQAREQAREQAREQgQ5EIP/jzR0IhooqAiIgAiIgAiIgAiLQ+gQkQFufsc4gAiIgAiIgAiIgAiIQEZAAjWBoUwREQAREQAREQAREoPUJSIC2PmOdQQREQAREQAREQAREICKgp+AjGNoUAREoDwHemTpv3rzMxDp16uT4AYLWMHv3bE1NjSvne23LmVd+FhZG/fv3L2eyyyStRYsWuUmTJrlevXqFv9bIBD8GQb3Ci18tS7MJEyY43vHbGkw5/3fffed69OgRfro37fzVum/y5MmhaPZjHNVaztYsV0duP7m4SoDmoqNjIiACJRH44IMPmv0KVjKRfv36uRNOOCG5u8XfZ82a5UaMGNGYzllnndW4vSw2eD/tp59+6jbbbLPG0yPMr7322vCLXIcddlh4TVnjwQrc4Gdtb7nlFrf55pu7HXbYoVVK8Mknn4Sf0D3kkEPcyiuvnHqOm2++2dXV1Tl+ua2chrC96667woCKn1488cQTy5l8u0/r4YcfDm21o5W7XBXT0dtPLo4SoLno6JgIiECrEGjJT6/myhBez/ZiiGGEC17YWIDyc678gAKmn3ZtL7WVnY+XX345iM/11lsvU/xmx9aRjk5A7Se7BUiAZrMJv0++eMGcEKK2czdXU9tpqdD1/rfEFy+c61+EXutqu3Rf6rh2iIAIODd8+PAwfWksmCrFmNY0McrU6qBBg8J+pnRtCp9pT34O1abW8Z4ypcXUINvLL7+8q63Nv5x94sSJburUqUH88etZK6ywQjgX/yEE8VRg5I2fqSX8lClTXJ8+fcK0ayxuEZeE54cQunfvHvLAFLQZU+yIT85HemPGjAmHyC/LD/AUck6+x4YwpVzEgwfTnnjdzIrJJ57J8ePHu1VWWSVz2trS1Wc2AeqZ5SJ77LFHdiAdSSXAdfDSSy+53XffPfV4R9ip9pNdyxKg2Wx8rzTXfXax71QWODdozz+55Xb/2VKhp79+vRt7p5+S8Y6XNX891XXq0bxDWSrCMtzB9NUzzzzjttpqK/fQQw+FjtCyQ0e7/fbbu7Fjx7rTTz/d8TOaMhEoF4E11lgjdc3nm2++6b744otwGkTkUUcdFcQk06mL/eAO22effdzo0aPde++9F74jBE20sgMRx8+wIhTT7MsvvwzTtwiy2BB2++23XxCPdBJ33HFHOIxgRAgjjs1WXXXVMLWL8HziiSfc119/bYfCJ3nn+sHTiThGfHJNYXHaO+20U/jVrueffz4cQ2jvu+++YZup+meffdbRacfGuXfddddQvjitXPlEeN56660hmaFDh7ojjjgiTjJsM62NqMezZ+txEcqUm2nuwYMHN4tDfXzzzTeh7DBH2CbXW3744YdB9CLg11133TBwsEQo17fffutgSF3Fwpj7DnUc5+X9998P9yjSSTPS++ijj4JYj0V6WljaC20NQU/eWSLC5wYbbBDa27Rp08JSCfJG3XNOBgrE4Tx4sd944w23xRZbhOSpf1hg1M+wYcPCNnVOe1599dVD/VNe2v5KK60UjmfFs/LDhDCcc7XVVmtMl8istf3444/DwIhrgDQJwzYDF1jYWtx11lkn9Xqg/ZB+XL+W55g9YQi79tprh3zzH+2CstHuSB9+GAM19rOmuc4vgVhxxRUDU1ja0gXYYZtuumngmsabcvCTzQzoqBcz6oprimuL6yyLoZUji72lx3XGvQB+Q4YMCbth+84774T7SszB4nTk9sMgm/qlnqlb2k63bt0MTYs+JUBz4Kvp2sP13fgHbvobl7tpr1/mBu7203Cxx1GmvXFt+NpzzQNLFp9PPfWU++qrr+JkM7e5MLfeeuvM47kO/POf/ww3gMcee8xdfPHF7qKLLmoMftppp4UbGDfeCy64oHG/NkSgHASuueaaZtcOHRiiCq8S6wfpkBA4jzzySOhkTHyyrnCttdYK4sTyEYtP9hGXji5rTal1OAgKhBEeRjpsOqEXX3zRHXzwwZZ0+MTLGItPdo4aNSp0fOSLDhDDi0qnS0fLfkQl1ydTbvbgRggY/UcerGzR7nA+1tqlGedmwJgUkbnyiaAxGzduXDhn0kvM+lTKT+e+4447hs6XexF5//73v2/RGz8RB4Q3I70zzzzTvgaxxj7+4Iug3HvvvcPxzz//3D3++OOBl0XAY8wAABEA01deeSV0biaGX3vttdDRpQlQOkPqnM4xOSCx9ONPmJN3vOWIbuJheNYRr/fdd1+z5RAIPQY1L7zwQghHHOLTHqnf119/PeznP0TqLrvs4jbeeGMHa8IhTk2gMnA65ZRTgrjKimflJy78yO/bb78d+CBgqWsGSIhCM46fccYZ4evtt98eBIIdI09HHnlkaKO2j0/aH+dAMFM+DM6UFxFG38K5GWQxA8HPKWNcK5wfrzz7R44c6Y455pjQdrh+rU3TRri2hw8f7u68884wOCA+58TWX3/90L6yeCN0aLsMmhgscG2TF2YrEP94U7MY5mKPqDWj3T366KNBSHNNcZ4nn3wy9H+wpo6T1lHbDwPMe++9N7RrmCDSGZTYdZ3kVOx3CdA8xPpvdWIQoAumfO3mfPGC67nGjo0x5k/8ws0Z9UT43m/Lkxr3F7tx6aWXugceeKCgaOecc07JApSbDkKARfq/+93v3G677eZ23nlnd8UVV4SbC1OdeE3iqcSCMqVAIpCHAIIkNoQbxkgaEUK7owM0ryHHGGlvt912bDYzvCyIVzptOieMjgrhFHc0FgmBgtefPzpgOlxEBJb0ilqcTTbZJAhfOioLg+ihs+I6QjjjxSO/119/vUULYckb3hXENBZ39nznJp40BIMZ5yB9vJhPP/102E3niqAj/7Fl5ZOOlDThToeBqEnaRhttFLx6iIktt9wydPwwxIOEuE4a3jyMThumCPvYyDdiHpGCB/uzzz5ze+65p0PoMuglDl5iBCdCAwGFsE4Tu3G6advM5CAiESV4xhiUXHXVVWlBm+1DwBGHtoUHGDa0PQQe90U8PHih8eSSx1NPPdVdffXVIc+0U+obAcRAZv/99w9p33333UFg4Tkzw5OMZ5s8kjYezULiMYBBvMH6nnvuCQytLsk7bWnbbbcN5YU/9Uo90zYRwFwvXBdwffXVV5cSCtSReVnxliL2rR6tHVBu6oz0zNPFeSh/nb/24PPuu++GZSXER9STZzyjCGHi77XXXqGd3HjjjeGa5GE7jD6G+Fm8qUvyzjXCdcR5MDyntM1CGCbZJ+8J1DHXF9c2QnjNNdcM4pNykG/aaZZ1tPZDvXLvYZB27LHHhoE49+lymQRoHpI96rZxXQZv4BaMf99Ne+P6ZgJ0+ls3h9i1PZzrvcF+eVLKPkyj54ZWiNGJtsS4aZ577rnuL3/5izvuuOPcDTfc4BC12N///ndHpyQTgXITQChZZ0bacXtnypPOBg+ZGUKLUXaacGJqmClRvCl4qMybZesdLQ37xDuFAEB0IjroXHMZwpKBGYZQYSoYw/ND5424JB1ESuxpJEzSO8u+QgwxYIYHCY8Pf3gF8VBiiB9bI8v3XPkk3MknnxwEMR1rmiEY6PDxKtHhI3Axm2ZOxsETjbhBGCEk8ZrGhjix114xLY14wHNIHAQH6VraMGSdKzM/dHDFGB0gHmqEBWIsrY1kpcfgGpGGyKBuGQgh3mhvLNXgz9oH7QnxR/ocRzxxHLMpWTsP5aM8ZngOETZmTCNj+eLh7eV85I36sQGZ1Q1tGRGJIaQwW1/MdWAeW/ZncUXMUSfUOcIC7x5CEk8+4tEGSAhQM+qV6X6MclG3DPqo58MPPzzsx1PP4MMGbPCiLPyxjeXjvc0224R2zbXFoAhu1JmJRNLIxzDJnjhJ4xoj/1xfCHjOccABBzRbMpKMw/eO1n64Z9uABQ8492lbtpDGp9h9EqAFEOu/1Q/chAd+5Ka/d4Vb4eD/drXd+oSLYNobl4XY/TY/z/GQUql29tlnlxq1pHh/+MMfwo2KjocbGva9730vjPZLSlCRRCAPAToTm1pNC2oi0o4hMhB5CNcso9PnzyzLc8FUKN5I0kS04PUi7SyLvYyIgNhsfaeJDbxepJXLK5DrmKVNvugQMXv4CmEQx6Vzjy1XPgmHxwgRQudvwjCOzzYigw4YbxkWr4sLO6L/EPx4VJlOxQOJKGJ9bpoZN/KPsMGSQhiBjQA1wUcYm8plO8tIExHCIAZxU4zRecbtxNoP+bUBEgMc/shf0iw89WXhEeZYXD/JTrrQeHY+8ki9Wf3T7igrg46kWdqEZ0kBhtC3OkiGR1Dg4WbNKOHJN9PxOCPwTlJfCMs0LzhpWbrkjW08pwzuSMvykjynfbfjWbwpI9c8y1lYYoFgZUqc/Ra3WPZ27uQnnn4EKMaADXGZzzpi+8GTz9Ic7nN4uJnVQMCXwyRAC6DYd7Oj3YSHfxQeRprx7t2u31bHh+n4hVPHhNh9tyz/+wwLyFbJQbj4mSJjVMlFzUiaaXiZCLQWAdbBWcfFOehQ8MRgTDfGnpuw0/9HJ4QISHbmhEco0YFaB02cpMCxdHgAwsIxgqfDNQFK+zfBZ+FzfRLPxCfCg6d78YpZ+ghptmPBhwhE4OHNQoSnPTDDNWgeK7w+hMMzZ0sVyBNhYrGWK5+IbqaGMdgff/zxqcFhQT1YR8xAIcsQyAhWPGEsGWKKHU+kebey4pnHjvrinoO4gpHVAcdtiQaMqG+Os89EXpw2eYYP56bu0sLE4ePtWHyyH9FBXeEhp2xWb6RrwjmOb6KU9mueVI4j9mMBkzxPofHic8XbrMXjHDCLH9AhDLxggWC0GSwEeuxVj9Mib4i8p/3yDjizTR1Qr+bhtWszjpe2TZtAnDCoY1qbgR7rfc3gFLfhQnhTPtojaTPIsnWohTJMsre8xJ8Ielv2xvWI9xaHDJ79XJZMu5DyxOmVWoZC48XnirdLbT8MCLmnMRuFdx5m3JclQGO6rbzdufcg12eDE92Md6/xDyNdEwTotDdvDGftPmx7133o+i3KAR0Fi8ALMabgWbvZUmPtnI0o6fjwgti0Y0vTVnwRSBIwD1u8n04OQcXDN3SYGAKRKUA6W25+rAdj7VFsTDniHYmNzpNOFCGRNBM37MdTE4dBZLDGL/kgUjIN+x6nxTQmXqPYe8u1zFpCPEh0TqRPOUzg0VGnCVDEDx0305ekx00+No4Tr1ABiiAxI02ERuwxtWN8Mt1L/vAC4R3LsgcffDCId8IYh6w04zSYxqZu8HbyAn6ENB0+IgBOeBvtXsRggfqx47Goi9PEKwaj2267LaRRjAiN02HbBM91110X1r8imhBiLE8g37ExyOGPQRDr6ev8sgP4kt8skU/8UuPZuRGJTI/zsAzT0+SL64B1mYgBpsQRlAhUPMMcQywlrx1LDzGB4EJom2jlHJQbIUubKMRsiQDti/bLsgWMh5FoswwUWKaCSIUTbSEfbwYYhGGNMGWzAU5LGVp5yCttmfww5U/5aUe0Pa4xE7wWPt9nvvLE8UstQ6nx7Nylth+8n9zjqAe879zLCrnm7bz5PuUBzUdoyfF+W53kEKA8dDRvtF/b9O7l4Ui/rU4rMIXsYP/+978bR2PZoRqOsF6zpQKUKZMf/ch7dL1xsfGdGxUXPA1dJgItJZD0FCTTs+OIT4QIhoikPSJIeDAEUYrgotOlIzOjQ7I4eFXxqtlSEkuXsLaNp4oHDvDE4L1EQOFdNA8XT9xa2Dge24gRM8KQP4QADyPQeTMdSHqIUYwODNFEWPJER2xikHwnvbmWPvFYS8cUKB02eSMNRCGeVls7WWg+ERgIFdZg0vnk6jS4/jE7R/iS8l+dF1vcIxA3lIXBMJ4Z8win5Y19nBuBz7Q9ItSmfmFpv5yER5t84q1lih9hGnvMLW3jxeCFfeSdAYsNYOx4SvbDLksnPs6T3whqnAAIOMLQJsgDxneLR1kOOuig8PAbSxDIL1PPLE+I22gyH6XGs3zy8BFeKGYKaE/80WbIF/dshCiDCPZTP3hycz0vAFuEE+3YptoRnWxTD1ZeK7/lg08rG5+0ffJmgycGF3BEECNAEXjkmXqCD+ek3nPx5hzkgXrl06ylDC0d8gMj7hswoqy0T+45iHjEPeVIs5iLHa/m9sP9DRbcSzDuR3bNWvlb8lnjL9wG10NLUukAccH05Z/rHE/Dd+rT2y2a4R9k8PJ9rfOnudruTS+KLgUFHhir4HzxeWCJNRilGh0bFx3n48lEnlJkIT8dC+kiCOwGU+o5FE8Eyk2AjoHOHuOGjwBBADIqT+sUkufn+kWMIQ7pyOgA8bTRKdq6uWScXN8RwJyXGzRGWlw39j2Om+tYHC7e5jrFq1dK3iwdyow31TxItj/+hAmePDjiwct37eMBoTwmsuO0CtkmPuzgnlZv1Ath8IItCyNvcM/HgbyRT9pgLr5pZSg1nqVFnZK/NEY23Z12zOLbJ6zxBsbeY8pPXK6RYgwOlg5pcB3E9cu+NE65eHMNZHnAW8qwmLIVEzZXeZLplFqGUuPZ+UtpP7QV2lY8yLL0WvIpAVoEvUlPXuomPvqTxhh9NjvNrXj0lY3fK2GDTobXxjDaZYTJiJcRK94PLnjeD3r++edXQlGUxw5EIClA8azIWk4Ajyv3geHDhzdOxbY8VaUgAiIgAvkJNM0v5Q/b4UP03eJ7fj6mCUO/LdIX9jeFaF9bvCcP8cnolnUdNvXC+o5//OMfIbMXXXSRo7OXiYAIVDcBvDW8YgqvRvwOy+outUonAiLQXghIgBZRE136DXU9Vmn4TdsuA4Y1eydoEcksk6Cs0TnrrLPCufmlI34SMLaTTjoprANlSoZXMjE1JxOB9kKAtZOIJP60Trk8tcJT0qxz5Mnflkz1lyc3SkUERKCjEdAUfBE1vnjeDPfZ7/u6+vn8Nvyf/W/D/7SI2AoqAiIgAiIgAiIgAiIAAXlAi2gHU56/PIhPpuH7MR0vEwEREAEREAEREAERKJqAXsOUB9mCyV/5d3/e6GaPet7N+fyhELrvJqe4zv1XyhNTh0VABERABERABERABNIISICmUYn2LZjyrZv05K8a93RfeSe3wiF/bfyuDREQAREQAREQAREQgeIIaA1oHl4Lp45200fe42pqu7juK27sug3bzP/u+7J5R12erOqwCIiACIiACIiACFQEAQnQiqgmZVIEREAEREAEREAEqoeAHkKqnrpUSURABERABERABESgIghIgFZENSmTIiACIiACIiACIlA9BCRAq6cuVRIREAEREAEREAERqAgCEqAVUU3KpAiIgAiIgAiIgAhUDwEJ0OqpS5VEBERABERABERABCqCgARoRVSTMikCIiACIiACIiAC1UNAArR66lIlEQEREAEREAEREIGKICABWhHVpEyKgAiIgAiIgAiIQPUQkACtnrpUSURABERABERABESgIghIgFZENSmTIiACIiACIiACIlA9BCRAq6cuVRIREAEREAEREAERqAgCEqAVUU3KpAiIgAiIgAiIgAhUDwEJ0OqpS5VEBERABERABERABCqCgARoRVSTMikCIiACIiACIiAC1UNAArR66lIlEQEREAEREAEREIGKICABWhHVpEyKgAiIgAiIgAiIQPUQkACtnrpUSURABERABERABESgIghIgFZENSmTIiACIiACIiACIlA9BCRAq6cuVRIREAEREAEREAERqAgCEqAVUU3KpAiIgAiIgAiIgAhUDwEJ0OqpS5VEBERABERABERABCqCgARoRVSTMikCIiACIiACIiAC1UNAArR66lIlEQEREAEREAEREIGKICABWhHVpEyKgAiIgAiIgAiIQPUQkACtnrpUSURABERABERABESgIghIgFZENSmTIiACIiACIiACIlA9BCRAq6cuVRIREAEREAEREAERqAgCEqAVUU3tK5Pz5893v/nNb9xvf/vbnBl77bXX3K9//Wv30EMP5QyngyIgAiIgAiIgAh2LQOeOVdzylrZ+knOz/uRcfb1zfS7xaZeRJmkufMS5Be85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908G03cREAEREAERaFcE8BfJOigBnJSTN3FugfdYYjSGBf4vOByn+I1V/J+3uf/24U5r2GbE0tUL1UWv+bBTnZt2od/+xrm+/9twnP+7H+g9iV5MYvP9szDeOemI12Uj9jRYzRDbav65aHrz78V8m/U/Pq8vNcTAUcp5KeMC79lN2nS/NhUjm4SjzNgkn/ehk3z+i38GqCGBMvyPgOQBIR4mGjlypFuwYIG74oor3Lrrrut+/OMfNztD9+7dXZ8+fcK+CRMmuMmTJ5f0AFOzRPVFBERABERABFqZALpA1kEJBHHmxedALx5X9MpzsFdiK850rv+fvQBbrgFK/VjnpiwRnz0P9WG8MB34qHPL+88BlzeEmekF6sIlwo89vX385d5t+OtxVEOYXr9o2scx0ii3IT67beXckC+cW8GXZYj/G/yK37dP+pn6+Dwt75XnYP836K6mMPMeaNouZWudddZxvHLp2WefdYce6qEtsQsvvDDse/zxx21X6me9X0/w7rvvujfffNONGjXK7bfffiHc//5vpPKXxNx9993dRx99FP4uv3xJhaSm2rDzN7/5TcjDvffe2xhq8ODBYR/5Pe644xr3a0MEREAEREAEWouAPKCtRbZC0u33O++xPLUpszV+errnT5u+z76qyYPZ75rmayR7eGE64wcNM/Bz7/TCc7umeMtiiyWiAx9u7r3svLX37Pq/pDHy6v1rH3bJEKzrIV6oeg/tPO+xXfR1MnRx3zt16uR23HHHpSKtvPLKja87WupgtOOXv/ylY90nNnToUPfTn/7UPfjgg473fLbU1ltvvaWS6Nq1q9tpp52W2q8dIiACIiACItBaBCRAW4tshaTb85TcGeVhHgxv6bQT/X/eqxiMHd6WfLj5zzV8X5b/9/az04VOnXc7wIf1a11jC+8pRYB+F+9t++0ddtih2Unr6urCd94dykvu+/fv3+y4voiACIiACIhApRGQAK20GitzfrPWYtpp5t9nW00PFDXtadpavIxFGznp3PCDQ02ZyrHVeeWlD9b2WLLPRPbSQdpkj72Q3k7Gi+vNFi3y6wVkIiACIiACIlDhBCRAK7wCW5L9giofL6FfJ9rrSOf6+CfZs6w1X1/Ea5MKsdol61YLCVvfjlc/M4UvEwEREAEREIFqJlCQBqlmACpbbgJd9vJPkd/qZ979AsvaVXKHzXW0xubqMwLxHs5gs5cOsOirpfel7mERqEwEREAEREAERKDdE2jHfqB2z65DZLDrJg3FnONFKC+rL9Zq/bs1sXkvNnxm/V+7QsORBSObh6if5eM+1XyfvomACIiACIiACFQ2AQnQyq6/Vs89T8jjWGRZ5LT/8CJ0fPNT8vqlaSf5J+EzHkLqvFpD+Ln++IJnfTpLv0s9BOi8xLs6z79fdP7dfhfT7gv9y+LPb3ruqSEl/S8CIiACIiACIlDpBDQFX+k12Mr5rx3s3/f5f/5F9F5kzvHvx5zjPZXd1veitJ8Xil582sx6z6PTM9LtcC8gf9UgYifs0vDJbHuNF5zLj2qK0/Wgpu2J/tWZNiNf4PLPpsgdaGv06NHuhBNOaCzxuHHjwvaHH37oeD+o2V577eXOO+88+6pPERABERABEVjmBCRAl3kVLIMMLHmoOvkaoqycdP8P/7L2dfwL6XfzXkz/QNK8D5pC1vjNnv54J388zdi/gp9+51eKZt/W4M30jk3X6evmoXnx/SD/xP1E/0tEmAlP3lPKGlBedp83v0vKFRJowX95z9OCtAuJmushpPjYnDlz3JNPPrlUkjwpH++31zgtFVA7REAEREAERGAZEajxv7rC7KpMBAoisHiqF5Hf+D8vRHnnZu0w/1km4UcGWPO56Eufpm+VtV681nQtKFsKJAIiIAIiIAIiUEEEJEArqLKUVREQAREQAREQARGoBgJ6CKkaalFlEAEREAEREAEREIEKIiABWkGVpayKgAiIgAiIgAiIQDUQkACthlpUGURABERABERABESggghIgFZQZSmrIiACIiACIiACIlANBCRAq6EWVQYREAEREAEREAERqCACEqAVVFnKqgiIgAiIgAiIgAhUAwEJ0GqoRZVBBERABERABERABCqIgARoBVWWsioCIiACIiACIiAC1UBAArQaalFlEAEREAEREAEREIEKIiABWkGVpayKgAiIgAiIgAiIQDUQkACthlpUGURABERABERABESggghIgFZQZSmrIiACIiACIiACIlANBCRAq6EWVQYREAEREAEREAERqCACEqAVVFnKqgiIgAiIgAiIgAhUAwEJ0GqoRZVBBERABERABERABCqIgARoBVWWsioCIiACIiACIiAC1UBAArQaalFlEAEREAEREAEREIEKIiABWkGVpayKgAiIgAiIgAiIQDUQkACthlpUGURABERABERABESggghIgFZQZSmrIiACIiACIiACIlANBCRAq6EWVQYREAEREAEREAERqCACEqAVVFnKqgiIgAiIgAiIgAhUAwEJ0GqoRZVBBERABERABERABCqIgARoBVWWsioCIiACIiACIiAC1UBAArQaalFlEAEREAEREAEREIEKIiABWkGVpayKgAiIgAiIgAiIQDUQkACthlpUGURABERABERABESggghIgFZQZSmrIiACIiACIiACIlANBCRAq6EWVQYREAEREAEREAERqCACEqAVVFnKqgiIgAiIgAiIgAhUAwEJ0GqoRZVBBERABERABERABCqIgARoBVWWsioCIiACIiACIiAC1UCgczUUQmUoncDMmTPdI4884r744gs3b968kNApp5zihg4dWnqiiikCIiACIiACIiACOQhIgOaAU+2HPv74Y7f77ru70aNHNyvqvvvuKwHajIi+iIAIiIAIiIAIlJOABGg5aVZYWueff34Qn6ussoo74YQT3LrrrhtKsN5661VYSZRdERABERABERCBSiJQU++tkjKsvJaPQF1dnRs1apS78sor3WmnnVa+hJWSCIiACIiACIiACOQgIA9oDjjJQwtnTnTzRr/jOvUZ7LoNWd/V1HZKBqmo72PHjg353XzzzSsq38ps+ycwf/78xjXFabnt1KmT69mzZ9qhFu+bMWNGSKOmpsb17t27xem1RgKzZ892MOrfv39rJN+maVIW1pIPGDDAdenSpVXOPWfOHEe9wqtr165LnQOWU6dOdf369XPdunVb6nhLd0yaNCmkv/zyy7u+ffu2NLmKib9o0SJH2Xv16hX+KibjBWSUsn333XduwYIFbtiwYWVtux21vRSAvVkQCdBmONK/1M+f48bceqqbOfLGxgC13Z1bbte/uQkP/ZdzXoeu9Zu5rrZz+W98jScsw8b48ePdOuus05iSPXQ0fPhw17lzU1N46qmn3KabbtoYThsiUCyBDz74wD333HOZ0RAKLPsot82aNcuNGDGiMdmzzjqrcXtZbCDMPv30U7fZZps1np7r7tprrw0d32GHHeZWWmmlxmOVuDFy5Ej3yiuvuKOPPtoNHjy4VYrwySefuGeffdYdcsghbuWVV17qHF9//bV76KGH3B577OHKvYTozTffdC+88EI4J4P1HXbYYanzV+uO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Cpv1iyNGjAjTsHic8EjZU9LtJ6fKiQiIQDUSkAAtoFYnPvZ7N/3tS13fTc913Ydu7N3ai92Mt29yc0Y1vAR7ud1+VkAqCiICIlAqAdZO2oMvrI+StZwA6xxZo8qaTx4UWc2vweW1TMk1sS0/k1IQAREQgaUJaA3o0kyW2jPu7nPd1Jf/utR+518RuML+V7v+25609DHtEQEREAEREAEREAERSCUgAZqKpfnOxfNmuDlfvermffeeWzhzvKvxU/Hdll/H9VxjJ9e5/0rNA+ubCIiACIiACIiACIhATgISoDnx6KAIiIAIiIAIiIAIiEC5CTS95K7cKSs9ERABERABERABERABEUghIAGaAkW7REAEREAEREAEREAEWo+ABGjrsVXKIiACIiACIiACIiACKQQkQFOgaJcIiIAIiIAIiIAIiEDrEZAAbT22SlkEREAEREAEREAERCCFgARoChTtEgEREAEREAEREAERaD0CEqCtx1Ypi4AIiIAIiIAIiIAIpBCQAE2Bol0iIAIiIAIiIAIiIAKtR0ACtPXYKmUREAEREAEREAEREIEUAhKgKVC0SwREQAREQAREQAREoPUISIC2HlulLAIiIAIiIAIiIAIikEJAAjQFinaJgAiIgAiIgAiIgAi0HgEJ0NZjq5RFQAREQAREQAREQARSCEiApkDRLhEQAREQAREQAREQgdYjIAHaemyVsgiIgAiIgAiIgAiIQAoBCdAUKNolAiIgAiIgAiIgAiLQegQkQFuPrVIWAREQAREQAREQARFIISABmgJFu0RABERABERABERABFqPgARo67FVyiIgAiIgAiIgAiIgAikEJEBToGiXCIiACIiACIiACIhA6xGQAG09tkpZBERABERABERABEQghYAEaAoU7RIBERABERABERABEWg9AhKgrcdWKYvA/8/edYBJUTTROkFAkajkjBIkJ0lKEBEERAUBJUgQRNQfzKKCiiJJUVSCAqKACkgSRAFJAioCIklyzjknQZT563Vf783Nze7t7u3d7d5Vfd/szPR091S/mdl5U1XdLQgIAoKAICAICAKCgAsCQkBdQJEkQUAQEAQEAUFAEBAEBIHEQ0AIaOJhKzULAoKAICAICAKCgCAgCLggIATUBRRJEgQEAUFAEBAEBAFBQBBIPATCh4BuWp94rZSaBQFBQBAQBAQBQUAQEATC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RQJ5EKAAzQMOL5EACZBAQQlgyaXu3bubmdnwUPXs2VN69eolpUqVMovSP/XUUwUtms+RAAmQgOcJcAje813IBpAACcQjASy7tH79elO1p59+WqzgvO++++TDDz8060pigpBXZlvHI2PWScyKBvGwHBT7ggQiJUABGikx3k8CJEACYRDo3LmzVK9e3awxOWHCBHnzzTfN8kLYOQeGXXEoPsMAyVvyJJCSkpLndV4kgXglQAEarz3DepEACXiaQL169YwHdN68ebJx40YjRDETfciQIdKtWzcZPHiwp9vHypMACZBANAQoQKOhx2dJgARIIA8C2J5x4sSJedwR+lJ6erq89NJLoS9GcRZbS9ISiwBii7ET0muvvZZYDWNrEp4ABWjCdzEbSAIk4CUCdneev/3tb65XGzv9YKF2WuIQsLtJJU6L2JJkIcCdkJKlp9lOEiABEiCBhCMwadIks7lAampqwrWNDUpsAhSgid2/bB0JkAAJkAAJkAAJxB0BDsHHXZewQiRAAslMAMs3bdq0KWYIEDPIXXNihpcFkwAJhEmAAjRMULyNBEiABAqDwAcffCCzZs0SzKJ32w4dOmQmq1CAuk226MqbOnWqYLLbiBEjiq4SfDMJFIAABWgBoPEREiABEoglgTvuuEOwx7fbduONN7pdJMsrYgKffvqpmQVPAVrEHcHXR0yAW3FGjIwPkAAJkAAJkAAJkAAJREOAAjQaenyWBEiABEiABIqQAGKGY7FkVxE2qdBf/fLLL8v9998ve/fuNUe7Bi/WzQ137dyMjAzz7LJly2Ty5MkybNgw+fnnnwu9LV56IQWol3qLdSUBEiABEiABB4GSJUtKiRIlHGeYjZQANn6YP3++nDx50hxXrVplihg4cKD07t071+I2b94seBYG8Yoydu7cKfhS8P7771OA5krOd4ExoPkA4mUSIAESIAESiFcCX3zxhVSsWNHEgcZrHeO9XmXLljVVrFKlijmWKVMmrCo//PDDsnXrVjl9+rTYZ3BE4heD/BFSgObPiHeQAAmQAAmQQFwSmDBhghGfM2fOjMv6eaFSrVu3lho1ashNN90kmKjXqlWrsKqN7U+PHz8uxYoVE5QBa9GihckfPHiQnul8KFKA5gOIl0mABEiABEiABBKXQN++faV06dKmgePGjZNu3bpla+yuXbvko48+MtvYDho0SGrW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BEiABEiABEiABEigUAn4NjYt1FfyZSRAAiRAAiRAAiRAAslMgAI0mXufbScBEiABEvA0gQEDBsj48eM93QZWPjkJUIAmZ7+z1SRAAiRAAglAwC62nwBNYROSjABnwSdZh7O5JEACJEACiUOgQ4cOYW19mjgtZksShQAnISVKT7IdJEACJEACJEACJOARAhyC90hHsZokQAIkQAIkQAIkkCgEKEATpSfZDhIgARIggaQj8Morr8j8+fOTrt1ssPcJUIB6vw/ZAhIgARIggSQlsHjxYlm1alWStp7N9jIBClAv9x7rTgIkQAIkQAIkQAIeJMBJSB7sNFaZBEiABEiABEDg1KlTUrJkSalQoQKBkICnCFCAeqq7WFkSIAESIAESIAES8D4BDsF7vw/ZAhIgARIgARIgARLwFAEKUE91FytLAiRAAiRAAiRAAt4nQAHq/T5kC0iABEiABEiABEjAUwQoQD3VXawsCZAACZAACZAACXifAAWo9/uQLSABEiABEiABEiABTxGgAPVUd7GyJEACJEACJEACJOB9AhSg3u9DtoAESIAESIAESIAEPEWAAtRT3cXKkgAJkAAJkAAJkID3CVCAer8P2QISIAESIAESIAES8BQBClBPdRcrSwIkQAIkQAIkQALeJ/D/YGTIrvnogowAAAAASUVORK5CYII="
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hi\n",
"hi\n",
"hi\n",
"bye\n",
"bye\n",
"bye\n",
"bye\n",
"bye\n"
]
}
],
"source": [
"# function references can be passed as arguments ...Wow!\n",
"\n",
"# first: try this in Python Tutor\n",
"\n",
"def hi():\n",
" print(\"hi\")\n",
" \n",
"\n",
"\n",
"# then on your own: define a function called bye\n",
"\n",
"def bye():\n",
" print(\"bye\")\n",
"\n",
"def call_n_times(f, n):\n",
" for i in range(n):\n",
" f()\n",
"\n",
"call_n_times(hi, 3)\n",
"# then on your own: invoke call_n_times with bye and 5 as arguments\n",
"\n",
"\n",
"call_n_times(bye, 5)\n",
"\n",
"\n",
"# Takeaway: "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Explain the default use of sorted() on lists of tuples, and on dictionaries.\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[99, 77, 55, 33, 22]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# first... did you know that sort/sorted takes a 2nd argument called reverse?\n",
"\n",
"populations = [55, 77, 33, 99, 22]\n",
"# TODO: sort populations in reverse\n",
"sorted(populations, reverse = True)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('Abbey', 'Roque', 24),\n",
" ('Alex', 'Cavalenni', 30),\n",
" ('Amanda', 'Kessel', 30),\n",
" ('Brianna', 'Decker', 30),\n",
" ('Caroline', 'Harvey', 19),\n",
" ('Hillary', 'Knight', 32)]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sorting part 1....how are lists of tuples sorted?\n",
"# olympic womens hockey badgers...first, last, age\n",
"# apologies for any errors\n",
"\n",
"owhockey_badgers = [ (\"Hillary\", \"Knight\", 32 ), \n",
" (\"Brianna\", \"Decker\", 30), \n",
" (\"Amanda\", \"Kessel\", 30),\n",
" (\"Alex\", \"Cavalenni\", 30), \n",
" (\"Caroline\", \"Harvey\", 19),\n",
" (\"Abbey\", \"Roque\", 24)\n",
" ]\n",
"\n",
"\n",
"# call sorted on this list of tuples\n",
"sorted(owhockey_badgers)\n",
"\n",
"# what did this make? How was it sorted? \n",
"# first item in a tuple is the default sorting behavior"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Cole'"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sorting part 2: define a function that returns a value from a tuple\n",
"def select0(some_tuple): # function must have exactly one parameter\n",
" return some_tuple[0]\n",
"\n",
"def select1(some_tuple):\n",
" return some_tuple[1]\n",
"\n",
"def silly_dog(some_tuple):\n",
" return some_tuple[2]\n",
"\n",
"# Test these functions on the tuple (\"Andy\", \"Meena\", \"Cole\")\n",
"\n",
"silly_dog((\"Andy\", \"Meena\", \"Cole\"))\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('Alex', 'Cavalenni', 30),\n",
" ('Brianna', 'Decker', 30),\n",
" ('Caroline', 'Harvey', 19),\n",
" ('Amanda', 'Kessel', 30),\n",
" ('Hillary', 'Knight', 32),\n",
" ('Abbey', 'Roque', 24)]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#call sorted using the key \n",
"# sort and sorted can take a parameter named key\n",
"# key is a reference to a function!\n",
"\n",
"\n",
"sorted(owhockey_badgers, key = select1)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('Caroline', 'Harvey', 19),\n",
" ('Abbey', 'Roque', 24),\n",
" ('Brianna', 'Decker', 30),\n",
" ('Amanda', 'Kessel', 30),\n",
" ('Alex', 'Cavalenni', 30),\n",
" ('Hillary', 'Knight', 32)]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sort the list of tuples based on age\n",
"sorted(owhockey_badgers, key = silly_dog)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Power Tip: Use Lambdas\n",
" \n",
"Lambda expressions are a way to abstract (make a shortcut to) a function reference.\n",
"\n",
"Lambda expressions removes the structure of define/name/return for the function.\n",
"\n",
"The term 'lambda' comes from mathematical theory.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('Caroline', 'Harvey', 19),\n",
" ('Abbey', 'Roque', 24),\n",
" ('Brianna', 'Decker', 30),\n",
" ('Amanda', 'Kessel', 30),\n",
" ('Alex', 'Cavalenni', 30),\n",
" ('Hillary', 'Knight', 32)]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sorting part 3....using lambdas\n",
"\n",
"'''\n",
"def no_name(t):\n",
" return t[-1]\n",
"'''\n",
"\n",
"sorted(owhockey_badgers, key = lambda t : t[-1])\n",
"\n",
"# read the lambda as: my no-name function has t as a parameter and returns t[-1]\n",
"# the variable 't' is like a function parameter"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('Alex', 'Cavalenni', 30),\n",
" ('Abbey', 'Roque', 24),\n",
" ('Amanda', 'Kessel', 30),\n",
" ('Hillary', 'Knight', 32),\n",
" ('Brianna', 'Decker', 30),\n",
" ('Caroline', 'Harvey', 19)]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# TODO: sort the list by the length of the first name\n",
"'''\n",
"def no_name(t):\n",
" return len(t[0])\n",
"'''\n",
"\n",
"sorted(owhockey_badgers, key = lambda t : len(t[0]))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### OK, I can sort a list of tuples....what about a list of dictionaries?"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'name': 'C', 'year': 2000, 'speed': 150},\n",
" {'name': 'B', 'year': 1990, 'speed': 250},\n",
" {'name': 'A', 'year': 1980, 'speed': 100}]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"hurricanes = [\n",
" {\"name\": \"C\", \"year\": 2000, \"speed\": 150},\n",
" {\"name\": \"A\", \"year\": 1980, \"speed\": 100},\n",
" {\"name\": \"B\", \"year\": 1990, \"speed\": 250},\n",
"]\n",
"\n",
"# call sorted on hurricanes and use a lambda expression to grab the year\n",
"sorted(hurricanes, key = lambda d : d[\"year\"], reverse=True)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'name': 'A', 'year': 1980, 'speed': 100},\n",
" {'name': 'C', 'year': 2000, 'speed': 150},\n",
" {'name': 'B', 'year': 1990, 'speed': 250}]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sort hurricanes from lowest to highest speed\n",
"# for you to do on your own...see the above example\n",
"\n",
"sorted(hurricanes, key = lambda d : d['speed'])\n"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"# on your own, sort hurricanes a different way.....\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### This is all great, but what I'd really like to do is to sort dictionaries!\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['ala mode', 'cookie', 'donut', 'hot dog', 'loaf', 'milk', 'pie']"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"menu = { 'pie': 3.95, \n",
" 'ala mode':1.50, \n",
" 'donut': 1.25, \n",
" 'cookie': 0.79, \n",
" 'milk':1.65,\n",
" 'loaf': 5.99,\n",
" 'hot dog': 4.99}\n",
"\n",
"# sorted (dict) returns a list of the keys sorted\n",
"sorted(menu)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### We can make progress on this by using the .items() method \n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_items([('pie', 3.95), ('ala mode', 1.5), ('donut', 1.25), ('cookie', 0.79), ('milk', 1.65), ('loaf', 5.99), ('hot dog', 4.99)])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"menu.items()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('ala mode', 1.5),\n",
" ('cookie', 0.79),\n",
" ('donut', 1.25),\n",
" ('hot dog', 4.99),\n",
" ('loaf', 5.99),\n",
" ('milk', 1.65),\n",
" ('pie', 3.95)]"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# that looks like a list of tuples!\n",
"\n",
"# let's sort menu.items() the same way we sorted a list of tuples\n",
"sorted(menu.items())"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'ala mode': 1.5,\n",
" 'cookie': 0.79,\n",
" 'donut': 1.25,\n",
" 'hot dog': 4.99,\n",
" 'loaf': 5.99,\n",
" 'milk': 1.65,\n",
" 'pie': 3.95}"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# now let's turn this list of tuples into a dict\n",
"# \n",
"\n",
"dict(sorted(menu.items()))"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'cookie': 0.79,\n",
" 'donut': 1.25,\n",
" 'ala mode': 1.5,\n",
" 'milk': 1.65,\n",
" 'pie': 3.95,\n",
" 'hot dog': 4.99,\n",
" 'loaf': 5.99}"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# can you change the previous code to sort by value? \n",
"dict(sorted(menu.items(), key = lambda t:t[1]))"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'pie': 3.95,\n",
" 'milk': 1.65,\n",
" 'loaf': 5.99,\n",
" 'donut': 1.25,\n",
" 'cookie': 0.79,\n",
" 'hot dog': 4.99,\n",
" 'ala mode': 1.5}"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# can you sort the dictionary by the length of the key? \n",
"dict(sorted(menu.items(), key = lambda t: len(t[0])))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## After Lecture"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Practice sorting a list of tuples\n",
"\n",
"# Practice sorting a list of dictionaries \n",
"\n",
"# Practice sorting a dictionary by keys\n",
"\n",
"# Practice sorting a dictionary by values\n",
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
%% Cell type:code id: tags:
```
python
# Warmup 1: dictionary from Friday's lecture
```
%% Cell type:code id: tags:
```
python
person_info
=
{
"
name
"
:
"
Andy
"
,
"
age
"
:
17
,
"
family
"
:
{
"
spouse
"
:
"
Kathleen
"
,
"
child1
"
:
{
"
name
"
:
"
Sam
"
,
"
age
"
:
16
,
"
sport
"
:
"
soccer
"
},
"
child2
"
:
{
"
name
"
:
"
Stevie
"
,
"
age
"
:
14
,
"
sport
"
:
"
fishing
"
}
}
}
person_info
```
%% Output
{'name': 'Andy',
'age': 17,
'family': {'spouse': 'Kathleen',
'child1': {'name': 'Sam', 'age': 16, 'sport': 'soccer'},
'child2': {'name': 'Stevie', 'age': 14, 'sport': 'fishing'}}}
%% Cell type:code id: tags:
```
python
def
search_dict_recursive
(
target_key
,
some_dict
):
'''
returns the Value associated with target_key if tarket_key in any level of some_dict,
None otherwise
'''
for
key
in
some_dict
:
if
key
==
target_key
:
return
some_dict
[
target_key
]
elif
type
(
some_dict
[
key
])
==
dict
:
# recursive case
return
search_dict_recursive
(
target_key
,
some_dict
[
key
])
return
None
print
(
search_dict_recursive
(
"
sport
"
,
person_info
))
```
%% Output
soccer
%% Cell type:code id: tags:
```
python
# Warmup 2: Trace the above in Python Tutor
```
%% Cell type:code id: tags:
```
python
``
`
%%
Cell
type
:
markdown
id
:
tags
:
## Lecture 23: Functions are Objects!
As
we
have
learned
previously
,
all
variables
in
Python
are
stored
as
objects
.
This
is
also
true
for
functions
,
and
it
gives
us
more
power
as
programmers
.
**
Learning
Objectives
:
**
-
Define
a
function
reference
and
trace
code
that
uses
function
references
.
-
Explain
the
default
use
of
sorted
()
on
lists
of
tuples
,
and
dictionaries
.
-
Sort
a
list
of
tuples
,
a
list
of
dictionaries
,
or
a
dictionary
using
a
function
as
a
key
.
-
Use
a
lambda
expression
when
sorting
.
%%
Cell
type
:
code
id
:
tags
:
```
python
# function references
# try this in Python Tutor
x = [1,2,3]
y = x
def f(thing): # what is f? its a function but also an object
return thing[-1]
z = f(y) # z stores the result of a call to f
g = f # what is g? it is a reference to an object that is a function
# TODO: similar to line 10, store the result of a call to g
w = g(x) # calls the same function
```
%% Cell type:code id: tags:
```
python
print(x)
print(f)
```
%% Output
[1, 2, 3]
<function f at 0x7f7932640160>
%% Cell type:markdown id: tags:
### Define a function reference and trace code that uses function references.
%% Cell type:markdown id: tags:

%% Cell type:code id: tags:
```
python
# function references can be passed as arguments ...Wow!
# first: try this in Python Tutor
def hi():
print("hi")
# then on your own: define a function called bye
def bye():
print("bye")
def call_n_times(f, n):
for i in range(n):
f()
call_n_times(hi, 3)
# then on your own: invoke call_n_times with bye and 5 as arguments
call_n_times(bye, 5)
# Takeaway:
```
%% Output
hi
hi
hi
bye
bye
bye
bye
bye
%% Cell type:markdown id: tags:
### Explain the default use of sorted() on lists of tuples, and on dictionaries.
%% Cell type:code id: tags:
```
python
# first... did you know that sort/sorted takes a 2nd argument called reverse?
populations = [55, 77, 33, 99, 22]
# TODO: sort populations in reverse
sorted(populations, reverse = True)
```
%% Output
[99, 77, 55, 33, 22]
%% Cell type:code id: tags:
```
python
# sorting part 1....how are lists of tuples sorted?
# olympic womens hockey badgers...first, last, age
# apologies for any errors
owhockey_badgers = [ ("Hillary", "Knight", 32 ),
("Brianna", "Decker", 30),
("Amanda", "Kessel", 30),
("Alex", "Cavalenni", 30),
("Caroline", "Harvey", 19),
("Abbey", "Roque", 24)
]
# call sorted on this list of tuples
sorted(owhockey_badgers)
# what did this make? How was it sorted?
# first item in a tuple is the default sorting behavior
```
%% Output
[('Abbey', 'Roque', 24),
('Alex', 'Cavalenni', 30),
('Amanda', 'Kessel', 30),
('Brianna', 'Decker', 30),
('Caroline', 'Harvey', 19),
('Hillary', 'Knight', 32)]
%% Cell type:code id: tags:
```
python
# sorting part 2: define a function that returns a value from a tuple
def select0(some_tuple): # function must have exactly one parameter
return some_tuple[0]
def select1(some_tuple):
return some_tuple[1]
def silly_dog(some_tuple):
return some_tuple[2]
# Test these functions on the tuple ("Andy", "Meena", "Cole")
silly_dog(("Andy", "Meena", "Cole"))
```
%% Output
'Cole'
%% Cell type:code id: tags:
```
python
#call sorted using the key
# sort and sorted can take a parameter named key
# key is a reference to a function!
sorted(owhockey_badgers, key = select1)
```
%% Output
[('Alex', 'Cavalenni', 30),
('Brianna', 'Decker', 30),
('Caroline', 'Harvey', 19),
('Amanda', 'Kessel', 30),
('Hillary', 'Knight', 32),
('Abbey', 'Roque', 24)]
%% Cell type:code id: tags:
```
python
# sort the list of tuples based on age
sorted(owhockey_badgers, key = silly_dog)
```
%% Output
[('Caroline', 'Harvey', 19),
('Abbey', 'Roque', 24),
('Brianna', 'Decker', 30),
('Amanda', 'Kessel', 30),
('Alex', 'Cavalenni', 30),
('Hillary', 'Knight', 32)]
%% Cell type:markdown id: tags:
### Power Tip: Use Lambdas
Lambda expressions are a way to abstract (make a shortcut to) a function reference.
Lambda expressions removes the structure of define/name/return for the function.
The term 'lambda' comes from mathematical theory.
%% Cell type:code id: tags:
```
python
# sorting part 3....using lambdas
'''
def no_name(t):
return t[-1]
'''
sorted(owhockey_badgers, key = lambda t : t[-1])
# read the lambda as: my no-name function has t as a parameter and returns t[-1]
# the variable 't' is like a function parameter
```
%% Output
[('Caroline', 'Harvey', 19),
('Abbey', 'Roque', 24),
('Brianna', 'Decker', 30),
('Amanda', 'Kessel', 30),
('Alex', 'Cavalenni', 30),
('Hillary', 'Knight', 32)]
%% Cell type:code id: tags:
```
python
# TODO: sort the list by the length of the first name
'''
def no_name(t):
return len(t[0])
'''
sorted(owhockey_badgers, key = lambda t : len(t[0]))
```
%% Output
[('Alex', 'Cavalenni', 30),
('Abbey', 'Roque', 24),
('Amanda', 'Kessel', 30),
('Hillary', 'Knight', 32),
('Brianna', 'Decker', 30),
('Caroline', 'Harvey', 19)]
%% Cell type:markdown id: tags:
### OK, I can sort a list of tuples....what about a list of dictionaries?
%% Cell type:code id: tags:
```
python
hurricanes = [
{"name": "C", "year": 2000, "speed": 150},
{"name": "A", "year": 1980, "speed": 100},
{"name": "B", "year": 1990, "speed": 250},
]
# call sorted on hurricanes and use a lambda expression to grab the year
sorted(hurricanes, key = lambda d : d["year"], reverse=True)
```
%% Output
[{'name': 'C', 'year': 2000, 'speed': 150},
{'name': 'B', 'year': 1990, 'speed': 250},
{'name': 'A', 'year': 1980, 'speed': 100}]
%% Cell type:code id: tags:
```
python
```
%% Cell type:code id: tags:
```
python
# sort hurricanes from lowest to highest speed
# for you to do on your own...see the above example
sorted(hurricanes, key = lambda d : d['speed'])
```
%% Output
[{'name': 'A', 'year': 1980, 'speed': 100},
{'name': 'C', 'year': 2000, 'speed': 150},
{'name': 'B', 'year': 1990, 'speed': 250}]
%% Cell type:code id: tags:
```
python
# on your own, sort hurricanes a different way.....
```
%% Cell type:markdown id: tags:
### This is all great, but what I'd really like to do is to sort dictionaries!
%% Cell type:code id: tags:
```
python
menu = { 'pie': 3.95,
'ala mode':1.50,
'donut': 1.25,
'cookie': 0.79,
'milk':1.65,
'loaf': 5.99,
'hot dog': 4.99}
# sorted (dict) returns a list of the keys sorted
sorted(menu)
```
%% Output
['ala mode', 'cookie', 'donut', 'hot dog', 'loaf', 'milk', 'pie']
%% Cell type:markdown id: tags:
### We can make progress on this by using the .items() method
%% Cell type:code id: tags:
```
python
menu.items()
```
%% Output
dict_items([('pie', 3.95), ('ala mode', 1.5), ('donut', 1.25), ('cookie', 0.79), ('milk', 1.65), ('loaf', 5.99), ('hot dog', 4.99)])
%% Cell type:code id: tags:
```
python
# that looks like a list of tuples!
# let's sort menu.items() the same way we sorted a list of tuples
sorted(menu.items())
```
%% Output
[('ala mode', 1.5),
('cookie', 0.79),
('donut', 1.25),
('hot dog', 4.99),
('loaf', 5.99),
('milk', 1.65),
('pie', 3.95)]
%% Cell type:code id: tags:
```
python
# now let's turn this list of tuples into a dict
#
dict(sorted(menu.items()))
```
%% Output
{'ala mode': 1.5,
'cookie': 0.79,
'donut': 1.25,
'hot dog': 4.99,
'loaf': 5.99,
'milk': 1.65,
'pie': 3.95}
%% Cell type:code id: tags:
```
python
# can you change the previous code to sort by value?
dict(sorted(menu.items(), key = lambda t:t[1]))
```
%% Output
{'cookie': 0.79,
'donut': 1.25,
'ala mode': 1.5,
'milk': 1.65,
'pie': 3.95,
'hot dog': 4.99,
'loaf': 5.99}
%% Cell type:code id: tags:
```
python
# can you sort the dictionary by the length of the key?
dict(sorted(menu.items(), key = lambda t: len(t[0])))
```
%% Output
{'pie': 3.95,
'milk': 1.65,
'loaf': 5.99,
'donut': 1.25,
'cookie': 0.79,
'hot dog': 4.99,
'ala mode': 1.5}
%% Cell type:markdown id: tags:
## After Lecture
%% Cell type:code id: tags:
```
python
# Practice sorting a list of tuples
# Practice sorting a list of dictionaries
# Practice sorting a dictionary by keys
# Practice sorting a dictionary by values
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment