-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
531 lines (348 loc) · 36.5 KB
/
index.html
File metadata and controls
531 lines (348 loc) · 36.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Atlanta Python Geeks of Reddit</title>
<meta name="author" content="Jim Cushing">
<meta name="description" content="In this week’s class, we covered: Lists, re-visited
Dictionaries
String formatting Lists To review, lists in Python are ordered collections of …">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link href="/atom.xml" rel="alternate" title="Atlanta Python Geeks of Reddit" type="application/atom+xml">
<link rel="canonical" href="">
<link href="/favicon.png" rel="shortcut icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<script async="true" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<header id="header" class="inner"><h1><a href="/">Atlanta Python Geeks of Reddit</a></h1>
<nav id="main-nav"><ul class="main">
<li><a href="/">Blog</a></li>
<li><a href="/blog/archives">Archives</a></li>
</ul>
</nav>
<nav id="mobile-nav">
<div class="alignleft menu">
<a class="button">Menu</a>
<div class="container"><ul class="main">
<li><a href="/">Blog</a></li>
<li><a href="/blog/archives">Archives</a></li>
</ul>
</div>
</div>
<div class="alignright search">
<a class="button"></a>
<div class="container">
<form action="http://google.com/search" method="get">
<input type="text" name="q" results="0">
<input type="hidden" name="q" value="site:python.supedupe.net">
</form>
</div>
</div>
</nav>
<nav id="sub-nav" class="alignright">
<div class="social">
<a class="rss" href="/atom.xml" title="RSS">RSS</a>
</div>
<form class="search" action="http://google.com/search" method="get">
<input class="alignright" type="text" name="q" results="0">
<input type="hidden" name="q" value="site:python.supedupe.net">
</form>
</nav>
</header>
<div id="content" class="inner">
<article class="post">
<h2 class="title">
<a href="/blog/2013/08/19/week-three/">
Week Three</a>
</h2>
<div class="entry-content">
<p>In this week’s class, we covered:</p>
<ul>
<li>Lists, re-visited</li>
<li>Dictionaries</li>
<li>String formatting</li>
</ul>
<h2>Lists</h2>
<p>To review, lists in Python are ordered collections of objects (such as strings or numbers). Declaring a list is easy:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geeks</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Jim'</span><span class="p">,</span> <span class="s">'Chad'</span><span class="p">,</span> <span class="s">'Cody'</span><span class="p">,</span> <span class="s">'Nic'</span><span class="p">,</span> <span class="s">'Rader'</span><span class="p">]</span>
</span></code></pre></td></tr></table></div></figure>
<p>To add an element to the end of a list:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geeks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">'Josh'</span><span class="p">)</span>
</span><span class='line'><span class="k">print</span> <span class="n">geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>['Jim', 'Chad', 'Cody', 'Nic', 'Rader', 'Josh']
</code></pre>
<p>To insert an element at the beginning of a list:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geeks</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s">'Tony'</span><span class="p">)</span>
</span><span class='line'><span class="k">print</span> <span class="n">geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>['Tony', 'Jim', 'Chad', 'Cody', 'Nic', 'Rader', 'Josh']
</code></pre>
<p>Copy a list:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">all_geeks</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">geeks</span><span class="p">)</span>
</span><span class='line'><span class="k">print</span> <span class="n">all_geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>['Tony', 'Jim', 'Chad', 'Cody', 'Nic', 'Rader', 'Josh']
</code></pre>
<p>To remove an element from a list:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geeks</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s">'Jim'</span><span class="p">)</span>
</span><span class='line'><span class="k">print</span> <span class="n">geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>['Tony', 'Chad', 'Cody', 'Nic', 'Rader', 'Josh']
</code></pre>
<p>You may also remove an element from a list using the <code>del</code> function and specifying a position in the list. For example, to remove the first element:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">del</span><span class="p">(</span><span class="n">geeks</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span><span class='line'><span class="k">print</span> <span class="n">geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>['Chad', 'Cody', 'Nic', 'Rader', 'Josh']
</code></pre>
<p>Python, like many languages, starts counting at zero. So the first element in a list has index <code>0</code>, the second index <code>1</code>, and so one. <code>-1</code> represents the last element in a list; <code>-2</code> the second-to-last, etc.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">print</span> <span class="n">geeks</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">geeks</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">geeks</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">geeks</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span>
</span><span class='line'><span class="k">del</span><span class="p">(</span><span class="n">geeks</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</span><span class='line'><span class="k">print</span> <span class="n">geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>Chad Cody Josh Rader
['Chad', 'Nic', 'Rader', 'Josh']
</code></pre>
<p>We have gotten rid of a bunch of our geeks. Fortunately, we made a copy of our list of geeks earlier, so let’s make a copy of that copy, assign all the geeks’ names to <code>geeks</code> once again:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geeks</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">all_geeks</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<p>We discussed a few ways to put two lists together. One common way is using the <code>+</code> (plus) operator:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">freaks</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Frankenstein'</span><span class="p">,</span> <span class="s">'Waffleman'</span><span class="p">,</span> <span class="s">'Swampthing'</span><span class="p">]</span>
</span><span class='line'><span class="n">freaks_and_geeks</span> <span class="o">=</span> <span class="n">geeks</span> <span class="o">+</span> <span class="n">freaks</span>
</span><span class='line'><span class="k">print</span> <span class="s">'geeks: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">geeks</span>
</span><span class='line'><span class="k">print</span> <span class="s">'freaks: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">freaks</span>
</span><span class='line'><span class="k">print</span> <span class="s">'freaks and geeks: </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">freaks_and_geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>geeks: ['Chad', 'Nic', 'Rader', 'Josh']
freaks: ['Frankenstein', 'Waffleman', 'Swampthing']
freaks and geeks: ['Chad', 'Nic', 'Rader', 'Josh', 'Frankenstein', 'Waffleman', 'Swampthing']
</code></pre>
<p>Using <code>+</code> is useful when we want to assign the combined list to a new variable. But we can also <code>extend</code> a list, adding another list to it and changing the original list:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">nerds</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Urkel'</span><span class="p">,</span> <span class="s">'Alfred E. Neuman'</span><span class="p">]</span>
</span><span class='line'><span class="n">geeks</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">nerds</span><span class="p">)</span>
</span><span class='line'><span class="k">print</span> <span class="n">geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>['Tony', 'Jim', 'Chad', 'Cody', 'Nic', 'Rader', 'Josh', 'Urkel', 'Alfred E. Neuman']
</code></pre>
<p>Wait, what are those last two guys doing in there? They don’t belong. Let’s get rid of them. You can delete multiple elements at a time:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">del</span><span class="p">(</span><span class="n">geeks</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:])</span>
</span><span class='line'><span class="k">print</span> <span class="n">geeks</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>['Tony', 'Jim', 'Chad', 'Cody', 'Nic', 'Rader', 'Josh']
</code></pre>
<p>Recall that <code>[-2]</code> refers to the second-to-last element in a list. So <code>del(geeks[-2:])</code> means, delete elements in <code>geeks</code>, starting from the second-to-last element and going to the end of the list. If we omitted the colon (i.e., <code>del(geeks[-2])</code>), that would mean delete the second-to-last element and stop there; don’t delete to the end of the list. Urkel would have been yanked, but Alfred E. Neuman would have remanded.</p>
<h3>List Comprehensions</h3>
<p>List comprehensions are a powerful construct in Python that let you concisely create a new list from an existing list.</p>
<p>To create a list, <code>upper_geeks</code>, with the values of <code>geeks</code> converted to upper case, you could loop over them like this:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="c"># There's a better way!</span>
</span><span class='line'><span class="n">upper_geeks</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># create an empty list</span>
</span><span class='line'><span class="k">for</span> <span class="n">geek</span> <span class="ow">in</span> <span class="n">geeks</span><span class="p">:</span>
</span><span class='line'> <span class="n">upper_geeks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">geek</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span></code></pre></td></tr></table></div></figure>
<p>The list comprehension version is shorter and more “Pythonic”:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">upper_geeks</span> <span class="o">=</span> <span class="p">[</span><span class="n">geek</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">geek</span> <span class="ow">in</span> <span class="n">geeks</span><span class="p">]</span>
</span></code></pre></td></tr></table></div></figure>
<p>Here’s a list comprehension for the squares of the numbers zero through nine:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">squares</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">**</span> <span class="mi">2</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)]</span>
</span><span class='line'><span class="k">print</span> <span class="n">squares</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
</code></pre>
<h2>Dictionaries</h2>
<p>Dictionaries in Python are a data collection to maps one object (the key) to another object (the value). (In other languages, these are called associative arrays, hashes, maps, etc.) You could use this to map the states’ two letter abbreviates to their names, or geeks to their ages:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geek_ages</span> <span class="o">=</span> <span class="p">{</span><span class="s">'Jim'</span><span class="p">:</span> <span class="mi">37</span><span class="p">,</span> <span class="s">'Chad'</span> <span class="p">:</span> <span class="mi">37</span><span class="p">,</span> <span class="s">'Cody'</span><span class="p">:</span> <span class="mi">26</span><span class="p">,</span> <span class="s">'Rader'</span><span class="p">:</span> <span class="mi">28</span><span class="p">,</span> <span class="s">'Nic'</span><span class="p">:</span> <span class="mi">21</span><span class="p">,</span> <span class="s">'Josh'</span><span class="p">:</span> <span class="mi">25</span><span class="p">,</span> <span class="s">'Tony'</span><span class="p">:</span> <span class="mi">26</span><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>
<p>Curly brackets (<code>{}</code>) are used to declare dictionaries. A key comes before a colon (<code>:</code>), and the value after the colon. A comman (<code>,</code>) is used to separate key:value pairs.</p>
<p>In the example above, the keys are strings, so we put them in quotes, and the values are numbers (integers, specifically), so we did not use quotes for the values.</p>
<p>To retrieve a value for a key, use square brackets (<code>[]</code>), like you do to access an element from a list. Instead of the index (0, 1, 2, etc.), put the key in the brackets:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">codys_age</span> <span class="o">=</span> <span class="n">geek_ages</span><span class="p">[</span><span class="s">'Cody'</span><span class="p">]</span> <span class="c"># gets value 26</span>
</span></code></pre></td></tr></table></div></figure>
<p>You can change the value of an item in a dictionary (for example, if someone has a birthday):</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geek_ages</span><span class="p">[</span><span class="s">'Rader'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">29</span>
</span></code></pre></td></tr></table></div></figure>
<p>A short-hand way to add one to an existing value is the <code>+=</code> operator:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geek_ages</span><span class="p">[</span><span class="s">'Nic'</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span> <span class="c"># Nic's age goes from 21 to 22</span>
</span></code></pre></td></tr></table></div></figure>
<p>A element can be added to a dictionary by assigning a value to a key that doesn’t yet exist:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geek_ages</span><span class="p">[</span><span class="s">'Ethan'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">9</span>
</span></code></pre></td></tr></table></div></figure>
<p>Ethan isn’t yet old enough to have a beer. We better get him out of here:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">del</span><span class="p">(</span><span class="n">geek_ages</span><span class="p">[</span><span class="s">'Ethan'</span><span class="p">])</span>
</span></code></pre></td></tr></table></div></figure>
<p>Looping over the keys in a dictionary is easy:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">geek_ages</span><span class="p">:</span>
</span><span class='line'> <span class="k">print</span> <span class="n">name</span>
</span></code></pre></td></tr></table></div></figure>
<p>If you want to loop over the values instead:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">for</span> <span class="n">age</span> <span class="ow">in</span> <span class="n">geek_ages</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
</span><span class='line'> <span class="k">print</span> <span class="n">age</span>
</span></code></pre></td></tr></table></div></figure>
<p>What if you want to the key and values? You could do the following, but there’s a better way:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="c"># Not the easiest way to do this</span>
</span><span class='line'><span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">geek_ages</span><span class="p">:</span>
</span><span class='line'> <span class="n">age</span> <span class="o">=</span> <span class="n">geek_ages</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
</span><span class='line'> <span class="k">print</span> <span class="s">'{0} is {1} years old'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">age</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<p>The better, simpler, and more “Pythonic” way uses the <code>items()</code> method of the <code>Dictionary</code> class:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">age</span> <span class="ow">in</span> <span class="n">geek_ages</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span class='line'> <span class="k">print</span> <span class="s">'{0} is {1} years old'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">age</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<p>You can use list comprehensions with a dictionary. What’s will be the result, a list or a dictionary? Let’s try:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geek_names_and_ages</span> <span class="o">=</span> <span class="p">[</span><span class="s">'{} is {} years old'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span><span class="n">age</span><span class="p">)</span>
</span><span class='line'> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">age</span> <span class="ow">in</span> <span class="n">geek_ages</span><span class="o">.</span><span class="n">items</span><span class="p">()]</span>
</span><span class='line'><span class="k">print</span> <span class="n">geek_names_and_ages</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>['Rader is 28 years old', 'Chad is 37 years old', 'Nic is 21 years old', 'Jim is 37 years old', 'Josh is 25 years old', 'Tony is 26 years old', 'Cody is 26 years old']
</code></pre>
<p>It’s a list; note the square brackets instead of curly brackets. This makes sense: A list comprehension always makes a list.</p>
<p>Is there such a thing a dictionary comprehesion? Starting with Python 2.7, there is:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">geek_ages_next_decade</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="mi">10</span> <span class="o">+</span> <span class="n">age</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">age</span> <span class="ow">in</span> <span class="n">geek_ages</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
</span><span class='line'><span class="k">print</span> <span class="n">geek_ages_next_decade</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>{'Rader': 38, 'Chad': 47, 'Nic': 31, 'Jim': 47, 'Josh': 35, 'Tony': 36, 'Cody': 36}
</code></pre>
<p>We’re getting old, my friends!</p>
<h2>String Formatting</h2>
<p>If you’ve been paying close attention, you’ve already seen two ways to format strings in examples above: Using the percent (<code>%</code>) character, and using the <code>String.format()</code> method. While the latter is the prefered way, the former has been around in Python for longer, so you’ll still see it used frequently. Thus, it’s useful understanding so you can read others’ code.</p>
<p>The example below shows both the <code>%</code> and <code>format()</code> ways of formatting strings:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">name</span> <span class="o">=</span> <span class="s">'Jim'</span>
</span><span class='line'><span class="n">age</span> <span class="o">=</span> <span class="mi">37</span>
</span><span class='line'><span class="k">print</span> <span class="s">'</span><span class="si">%s</span><span class="s"> is </span><span class="si">%d</span><span class="s"> years old.'</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">age</span><span class="p">)</span>
</span><span class='line'><span class="k">print</span> <span class="s">'{} has been alive for {} years.'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">age</span><span class="p">)</span>
</span><span class='line'><span class="k">print</span> <span class="s">'About {1} years ago, {0} was born.'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">age</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>Jim is 37 years old
Jim has been alive for 37 years
About 37 years ago, Jim was born
</code></pre>
<p>Notice in the first two <code>print</code> statements, the arguments are given in the same order as they appear in the string: first <code>name</code> and then <code>age</code>. On line 5, however, the order of the arguments is different than the order they appear in the printed string. This is because the placeholders (<code>{1}</code> and <code>{0</code>}) refer to, respectively, the second and first arguments to <code>format()</code> (arguments, like elements in a list, are numbered starting at zero).</p>
<p>The <code>format()</code> method allows the same argument to appear multiple places in a string. See the example below:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">name</span> <span class="o">=</span> <span class="s">'Jim'</span>
</span><span class='line'><span class="n">beverage</span> <span class="o">=</span> <span class="s">'beer'</span>
</span><span class='line'><span class="k">print</span> <span class="s">"{0}'s favorite beverage is {1}. Here's your {1}, {0}!"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">beverage</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>Jim's favorite beverage is beer. Here's your beer, Jim!
</code></pre>
<p>To do the same thing with <code>%s</code>, you’d have to list the arguments twice each:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="k">print</span> <span class="s">"</span><span class="si">%s</span><span class="s">'s favorite beverage is </span><span class="si">%s</span><span class="s">. Here's your </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">!"</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">beverage</span><span class="p">,</span> <span class="n">beverage</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>Jim's favorite beverage is beer. Here's your beer, Jim!
</code></pre>
<p>The <code>format()</code> method allows you to do other things that you can’t do as easily, or at all, with <code>%</code>. For example, if you want to display a list of items on a check and their prices, with two decimal places each, neatly aligned, here’s how to do so with <code>format()</code>:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">check</span> <span class="o">=</span> <span class="p">{</span><span class="s">'water'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s">'beer'</span><span class="p">:</span> <span class="mf">4.95</span><span class="p">,</span> <span class="s">'hamburger'</span><span class="p">:</span> <span class="mf">6.50</span><span class="p">,</span>
</span><span class='line'> <span class="s">'steak'</span><span class="p">:</span> <span class="mf">18.95</span><span class="p">,</span> <span class="s">'glen garioch whiskey'</span><span class="p">:</span> <span class="mi">2600</span> <span class="p">}</span>
</span><span class='line'><span class="k">for</span> <span class="n">item</span><span class="p">,</span> <span class="n">price</span> <span class="ow">in</span> <span class="n">check</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span class='line'> <span class="k">print</span> <span class="s">'{0:22} {1:8,.2f}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">title</span><span class="p">(),</span> <span class="n">price</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'><span class="k">print</span> <span class="s">'-'</span> <span class="o">*</span> <span class="mi">31</span>
</span><span class='line'><span class="n">total</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">check</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
</span><span class='line'><span class="k">print</span> <span class="s">'{0:22} {1:8,.2f}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s">"Total"</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<pre><code>Water 0.00
Glen Garioch Whiskey 2,600.00
Beer 4.95
Steak 18.95
Hamburger 6.50
-------------------------------
Total 2,630.40
</code></pre>
<p>The first placeholder, <code>{0:22}</code>, tells Python to print the item name in a field 22 characters wide. The second place holder, <code>{1:8,.2f}</code>, tells Python to print the price in a field 8 characters wide, to include commas to separate thousands, to include two decimal points, and to format the number as a floating-point (<code>f</code>).</p>
<p>For more information on how to format strings using the <code>format()</code> method, see the <a href="http://docs.python.org/2/library/string.html#format-specification-mini-language">Python language documentation</a>.</p>
<p>Also demonstrated in that example is the <code>sum()</code> function which, you guessed it, gives the sum of a list of numeric values.</p>
</div>
<div class="meta">
<div class="date">
<time datetime="2013-08-19T19:00:00-04:00" pubdate data-updated="true">Aug 19<span>th</span>, 2013</time></div>
<div class="tags">
<a class='category' href='/blog/categories/dictionaries/'>dictionaries</a>, <a class='category' href='/blog/categories/formatting/'>formatting</a>, <a class='category' href='/blog/categories/lists/'>lists</a>, <a class='category' href='/blog/categories/strings/'>strings</a>
</div>
</div>
</article>
<nav id="pagenavi">
<div class="center"><a href="/blog/archives">Blog Archives</a></div>
</nav></div>
<footer id="footer" class="inner">Copyright © 2013
Jim Cushing
</footer>
<script src="/javascripts/slash.js"></script>
<script src="/javascripts/jquery.fancybox.pack.js"></script>
<script type="text/javascript">
(function($){
$('.fancybox').fancybox();
})(jQuery);
</script> <!-- Delete or comment this line to disable Fancybox -->
</body>
</html>