{"id":2943,"date":"2025-09-18T19:05:15","date_gmt":"2025-09-18T23:05:15","guid":{"rendered":"https:\/\/www.sudlatnid.com\/?p=2943"},"modified":"2025-09-18T19:08:02","modified_gmt":"2025-09-18T23:08:02","slug":"use-python-dictionaries-better","status":"publish","type":"post","link":"https:\/\/www.sudlatnid.com\/?p=2943","title":{"rendered":"Use Python Dictionaries better"},"content":{"rendered":"<p id=\"fbd2\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" data-selectable-paragraph=\"\"><em><strong><img data-dominant-color=\"dcebe9\" data-has-transparency=\"true\" style=\"--dominant-color: #dcebe9;\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2948 has-transparency\" src=\"https:\/\/www.sudlatnid.com\/wp-content\/uploads\/2025\/09\/dictionary_in_python-300x113.avif\" alt=\"\" width=\"300\" height=\"113\" srcset=\"https:\/\/www.sudlatnid.com\/wp-content\/uploads\/2025\/09\/dictionary_in_python-300x113.avif 300w, https:\/\/www.sudlatnid.com\/wp-content\/uploads\/2025\/09\/dictionary_in_python-768x289.avif 768w, https:\/\/www.sudlatnid.com\/wp-content\/uploads\/2025\/09\/dictionary_in_python-850x320.avif 850w, https:\/\/www.sudlatnid.com\/wp-content\/uploads\/2025\/09\/dictionary_in_python.avif 932w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/strong><\/em><\/p>\n<p data-selectable-paragraph=\"\">\n<p class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" data-selectable-paragraph=\"\"><em><strong>ValueError<\/strong> <\/em>Why? Because I did this:<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"fd70\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\"><span class=\"hljs-built_in\">print<\/span>(student[<span class=\"hljs-string\">'marks'<\/span>])<\/span><\/pre>\n<p id=\"6cf8\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" data-selectable-paragraph=\"\">And guess what? <code class=\"de pa pb pc pd b\">'marks'<\/code>\u00a0key was\u00a0<strong class=\"oh iq\">missing<\/strong>.<\/p>\n<ul>\n<li>\n<p id=\"5352\" class=\"pt pn ip bg pu gb pv gc gd ge pw gf gg gh px gi gj gk py gl gm gn pz go gp qa bl\"><strong class=\"an\">Use <\/strong><code class=\"de pa pb pc pd b\"><strong class=\"an\">.get()<\/strong><\/code><strong class=\"an\">\u00a0Like a Gentleman<\/strong><\/p>\n<\/li>\n<\/ul>\n<p id=\"f8f2\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">\u274c\u00a0Wrong Way<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"fdbb\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\">marks = student[<span class=\"hljs-string\">'marks'<\/span>]<\/span><\/pre>\n<p id=\"e7db\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">\u2705 Right Way:<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"f632\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\">marks = student.get(<span class=\"hljs-string\">'marks'<\/span>, <span class=\"hljs-number\">0<\/span>)<\/span><\/pre>\n<p id=\"0ae4\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">Now if\u00a0<code class=\"de pa pb pc pd b\">'marks'<\/code>\u00a0doesn\u2019t exist \u2014 you get\u00a0<code class=\"de pa pb pc pd b\">0<\/code>. No drama. No crying. Just calm<\/p>\n<ul>\n<li id=\"0e6f\" class=\"pt pn ip bg pu gb qr gc gd ge qs gf gg gh qt gi gj gk qu gl gm gn qv go gp qa bl\"><strong class=\"an\">Use <\/strong><code class=\"de pa pb pc pd b\"><strong class=\"an\">defaultdict<\/strong><\/code><strong class=\"an\">\u00a0\u2014 Python magic<\/strong><\/li>\n<\/ul>\n<p id=\"dc90\" class=\"pw-post-body-paragraph of og ip oh b oi qb ok ol om qc oo op gh qd or os gk qe ou ov gn qf ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">Tired of checking if key exists before adding?<\/p>\n<p id=\"0bd0\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">Try this:<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"c791\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\"><span class=\"hljs-keyword\">from<\/span> collections <span class=\"hljs-keyword\">import<\/span> defaultdict\r\n\r\nstudent_scores = defaultdict(<span class=\"hljs-built_in\">list<\/span>)\r\nstudent_scores[<span class=\"hljs-string\">'Azeem Teli'<\/span>].append(<span class=\"hljs-number\">95<\/span>)<\/span><\/pre>\n<p id=\"04ec\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">No need to check if it\u00a0<code class=\"de pa pb pc pd b\">'Azeem Teli'<\/code>\u00a0exists. Python will\u00a0<a class=\"ah qw\" href=\"https:\/\/buggybits.blogspot.com\/2025\/08\/use-python-defaultdict.html\" target=\"_blank\" rel=\"noopener ugc nofollow\"><strong class=\"oh iq\">auto-create<\/strong>\u00a0<\/a>it for you!<\/p>\n<ul>\n<li>\n<p id=\"81ae\" class=\"pt pn ip bg pu gb pv gc gd ge pw gf gg gh px gi gj gk py gl gm gn pz go gp qa bl\"><strong class=\"an\">Loop Like a Pro with\u00a0<\/strong><code class=\"de pa pb pc pd b\"><strong class=\"an\">.items()<\/strong><\/code><\/p>\n<\/li>\n<\/ul>\n<p id=\"2212\" class=\"pw-post-body-paragraph of og ip oh b oi qb ok ol om qc oo op gh qd or os gk qe ou ov gn qf ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">You don\u2019t need to juggle\u00a0<code class=\"de pa pb pc pd b\">dict.keys()<\/code>\u00a0and\u00a0<code class=\"de pa pb pc pd b\">dict.values()<\/code>\u00a0like a circus artist. Just do this:<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"e4a4\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\"><span class=\"hljs-keyword\">for<\/span> name, marks <span class=\"hljs-keyword\">in<\/span> student.items():\r\n    <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{name}<\/span> scored <span class=\"hljs-subst\">{marks}<\/span>\"<\/span>)<\/span><\/pre>\n<p id=\"6ceb\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">Clean. Readable. Pythonic.<\/p>\n<ul>\n<li>\n<p id=\"aaea\" class=\"pt pn ip bg pu gb pv gc gd ge pw gf gg gh px gi gj gk py gl gm gn pz go gp qa bl\"><strong class=\"an\">Use\u00a0<\/strong><code class=\"de pa pb pc pd b\"><strong class=\"an\">.setdefault()<\/strong><\/code><strong class=\"an\">\u00a0for Lazy People \ud83d\ude34<\/strong><\/p>\n<\/li>\n<\/ul>\n<p id=\"3cbb\" class=\"pw-post-body-paragraph of og ip oh b oi qb ok ol om qc oo op gh qd or os gk qe ou ov gn qf ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">This method is called the <em class=\"ps\">chef\u2019s kiss<\/em> for coders as lazy as me (\ud83d\ude05)<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"2515\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\">student.setdefault(<span class=\"hljs-string\">'name'<\/span>, <span class=\"hljs-string\">'Unknown'<\/span>)<\/span><\/pre>\n<p id=\"7946\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">If\u00a0<code class=\"de pa pb pc pd b\">'name'<\/code>\u00a0exists \u2014 nothing changes. If not \u2014 it sets to\u00a0<code class=\"de pa pb pc pd b\">'Unknown'<\/code>.<\/p>\n<ul>\n<li>\n<p id=\"9723\" class=\"pt pn ip bg pu gb pv gc gd ge pw gf gg gh px gi gj gk py gl gm gn pz go gp qa bl\"><strong class=\"an\">Because you are fancy <\/strong><strong class=\"an\">Use Dictionary Comprehensions<\/strong><\/p>\n<\/li>\n<\/ul>\n<p id=\"604a\" class=\"pw-post-body-paragraph of og ip oh b oi qb ok ol om qc oo op gh qd or os gk qe ou ov gn qf ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">Instead of:<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"0c32\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\">squares = {}\r\n<span class=\"hljs-keyword\">for<\/span> i <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-built_in\">range<\/span>(<span class=\"hljs-number\">10<\/span>):\r\n    squares[i] = i*i<\/span><\/pre>\n<p id=\"9d92\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">Do this:<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"5a5f\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\">squares = {i: i*i <span class=\"hljs-keyword\">for<\/span> i <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-built_in\">range<\/span>(<span class=\"hljs-number\">10<\/span>)}<\/span><\/pre>\n<p id=\"c3ff\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">Looks cool. Runs cool. Boss move \ud83d\ude0e<\/p>\n<ul>\n<li><strong>Don\u2019t Use\u00a0<code class=\"de pa pb pc pd b\">dict<\/code>\u00a0as a Variable Name!<\/strong><\/li>\n<\/ul>\n<p id=\"160b\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">I know\u2026 we all must have done this once<\/p>\n<pre class=\"pe pf pg ph pi pj pd pk bq pl bc bl\" style=\"padding-left: 40px;\"><span id=\"d64c\" class=\"pm pn ip pd b bh po pp m pq pr\" data-selectable-paragraph=\"\"><span class=\"hljs-built_in\">dict<\/span> = {<span class=\"hljs-string\">'a'<\/span>: <span class=\"hljs-number\">1<\/span>}<\/span><\/pre>\n<p id=\"d0d8\" class=\"pw-post-body-paragraph of og ip oh b oi oj ok ol om on oo op gh oq or os gk ot ou ov gn ow ox oy oz hl bl\" style=\"padding-left: 40px;\" data-selectable-paragraph=\"\">Bro, you just overwrote Python\u2019s own\u00a0<code class=\"de pa pb pc pd b\">dict()<\/code>\u00a0function.<br \/>\n<em class=\"ps\">RIP to built-ins<\/em><\/p>\n<p data-selectable-paragraph=\"\">\n","protected":false},"excerpt":{"rendered":"<p>ValueError Why? Because I did this: print(student[&#8216;marks&#8217;]) And guess what? &#8216;marks&#8217;\u00a0key was\u00a0missing. Use .get()\u00a0Like a Gentleman \u274c\u00a0Wrong Way marks = student[&#8216;marks&#8217;] \u2705 Right Way: marks = student.get(&#8216;marks&#8217;, 0) Now if\u00a0&#8216;marks&#8217;\u00a0doesn\u2019t exist \u2014 you get\u00a00. No&hellip;<\/p>\n<p><a class=\"excerpt-readmore\" href=\"https:\/\/www.sudlatnid.com\/?p=2943\">Read More<\/a><\/p>\n","protected":false},"author":2,"featured_media":2948,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[38],"tags":[],"class_list":["post-2943","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","odd"],"jetpack_featured_media_url":"https:\/\/www.sudlatnid.com\/wp-content\/uploads\/2025\/09\/dictionary_in_python.avif","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=\/wp\/v2\/posts\/2943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2943"}],"version-history":[{"count":5,"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=\/wp\/v2\/posts\/2943\/revisions"}],"predecessor-version":[{"id":2950,"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=\/wp\/v2\/posts\/2943\/revisions\/2950"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=\/wp\/v2\/media\/2948"}],"wp:attachment":[{"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sudlatnid.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}