forked from yazbel/python-istihza
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsozlukler.html
944 lines (879 loc) · 82.2 KB
/
sozlukler.html
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
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
<!DOCTYPE html>
<html lang="tr">
<html lang="tr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta content="Python 3.x'te sözlükler adlı veri tipi" name="description" />
<meta content="python, sözlük, sözlükler, dictionary" name="keywords" />
<title>Sözlükler — Python 3 için Türkçe Kılavuz</title>
<link rel="stylesheet" href="_static/pyramid.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/language_data.js"></script>
<script src="_static/translations.js"></script>
<link rel="search" title="Ara" href="search.html" />
<link rel="next" title="Sözlüklerin Metotları" href="sozluklerin_metotlari.html" />
<link rel="prev" title="Baytlar (Bytes) ve Bayt Dizileri (Bytearrays)" href="baytlar_ve_bayt_dizileri.html" />
<!--[if lte IE 6]>
<link rel="stylesheet" href="_static/ie6.css" type="text/css" media="screen" charset="utf-8" />
<![endif]-->
</head><body>
<div class='header'><a href='https://yazbel.com'>yazbel.com</a></div>
<ul class='navbar'>
<li><a href="#"><del>pdf desteği sonlanmıştır</del></a></li>
<li class="forum"><a href="http://forum.yazbel.com">forum</a></li>
</ul>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Gezinti</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="sozluklerin_metotlari.html" title="Sözlüklerin Metotları"
accesskey="N">sonraki</a></li>
<li class="right" >
<a href="baytlar_ve_bayt_dizileri.html" title="Baytlar (Bytes) ve Bayt Dizileri (Bytearrays)"
accesskey="P">önceki</a> |</li>
<li class="nav-item nav-item-0"><a href=".">⌂</a></li>
<li class="nav-item nav-item-this"><a href="">Sözlükler</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="body" role="main">
<div class="section" id="sozlukler">
<h1>Sözlükler<a class="headerlink" href="#sozlukler" title="Bu başlık için kalıcı bağlantı">¶</a></h1>
<p>Şu ana kadar Python programlama dilinde veri tipi olarak karakter dizilerini,
sayıları, listeleri, demetleri ve dosyaları öğrendik. Yeni veri tipleri
öğrendikçe Python’daki hareket alanımızın da genişlediğini siz de
farketmişsinizdir. Bu bölümde yine Python’daki önemli veri tiplerinden birini
inceleyeceğiz. Bu defa inceleyeceğimiz veri tipinin adı sözlük. İngilizcede buna
<em>dictionary</em> diyorlar.</p>
<p>Sözlükler de, tıpkı daha önceki derslerimizde öğrendiğimiz karakter dizileri,
sayılar, listeler, demetler ve dosyalar gibi programlama maceramız boyunca
işlerimizi bir hayli kolaylaştıracak ve hareket imkanımızı genişletecek veri
tiplerinden biridir.</p>
<p>Öteki veri tiplerinde olduğu gibi, sözlüklerin de birtakım metotları vardır.
İşte bu bölümde hem genel olarak sözlüklerden söz edeceğiz, hem de bu veri
tipinin metotlarını en ince ayrıntısına kadar inceleyeceğiz.</p>
<p>Sözlük denen veri tipi Python programlama dilinin son derece kullanışlı ve işe
yarar araçlarından bir tanesidir. Programlama alanında ilerledikçe, bu veri
tipinin neler yapabileceğini görüp şaşıracağınızı rahatlıkla söyleyebilirim.</p>
<p>Esasında biz daha önceki derslerimizin birinde sözlük adlı bu veri tipinden
üstünkörü de olsa söz etmiştik. Yani aslında bu veri tipiyle tanışıklığımız
eskiye dayanıyor.</p>
<p>Hatırlayacaksınız, karakter dizilerinin <code class="docutils literal notranslate"><span class="pre">str.maketrans()</span></code> ve
<code class="docutils literal notranslate"><span class="pre">translate()</span></code> adlı metotlarını anlatırken, Türkçeye özgü karakterleri ve
bunların noktasız karşılıklarını içeren <cite>çeviri_tablosu</cite> adını verdiğimiz şöyle
bir değişken tanımlamıştık:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">çeviri_tablosu</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Ö"</span><span class="p">:</span> <span class="s2">"O"</span><span class="p">,</span>
<span class="s2">"ç"</span><span class="p">:</span> <span class="s2">"c"</span><span class="p">,</span>
<span class="s2">"Ü"</span><span class="p">:</span> <span class="s2">"U"</span><span class="p">,</span>
<span class="s2">"Ç"</span><span class="p">:</span> <span class="s2">"C"</span><span class="p">,</span>
<span class="s2">"İ"</span><span class="p">:</span> <span class="s2">"I"</span><span class="p">,</span>
<span class="s2">"ı"</span><span class="p">:</span> <span class="s2">"i"</span><span class="p">,</span>
<span class="s2">"Ğ"</span><span class="p">:</span> <span class="s2">"G"</span><span class="p">,</span>
<span class="s2">"ö"</span><span class="p">:</span> <span class="s2">"o"</span><span class="p">,</span>
<span class="s2">"ş"</span><span class="p">:</span> <span class="s2">"s"</span><span class="p">,</span>
<span class="s2">"ü"</span><span class="p">:</span> <span class="s2">"u"</span><span class="p">,</span>
<span class="s2">"Ş"</span><span class="p">:</span> <span class="s2">"S"</span><span class="p">,</span>
<span class="s2">"ğ"</span><span class="p">:</span> <span class="s2">"g"</span><span class="p">}</span>
</pre></div>
</div>
<p>Burada <cite>çeviri_tablosu</cite> değişkeni içinde gösterdiğimiz biçimin Python’daki
adının ‘sözlük’ olduğunu da ifade etmiştik. İşte bu bölümde, orada şöyle bir
değinip geçtiğimiz bu veri tipini çok daha ayrıntılı bir şekilde ele alma
imkanımız olacak.</p>
<p>Hem eski bilgilerimize dayanarak, hem de yukarıda anlattıklarımızdan yola
çıkarak sözlük veri tipinin ne olduğuna dair halihazırda kafamızda bir fikir
oluşmuş olduğunu söyleyebiliriz.</p>
<p>Sözlükler öteki veri tiplerine kıyasla biraz farklı bir görünüşe sahip bir veri
tipidir. Biz birazdan sözlüklerin yapısını derinlemesine inceleyeceğiz.</p>
<p>Ancak sözlüklerin yapısını incelemeye geçmeden önce öğrenmemiz gereken bir şey
var. Tıpkı öteki veri tiplerinde olduğu gibi, sözlüklerle de çalışabilmek için
öncelikle bu veri tipini tanımlamış olmamız gerekiyor. O yüzden isterseniz
sözlüklerin yapısından söz etmeden önce bir sözlüğü nasıl tanımlayacağımızdan
bahsedelim.</p>
<div class="section" id="sozluk-tanimlamak">
<h2>Sözlük Tanımlamak<a class="headerlink" href="#sozluk-tanimlamak" title="Bu başlık için kalıcı bağlantı">¶</a></h2>
<p>Dediğimiz gibi, karakter dizilerini anlatırken verdiğimiz sözlük örneği
sayesinde sözlüklerin neye benzediğini az çok biliyoruz. Gelin isterseniz
sözlüklerin nasıl tanımlandığını inceleyerek bu veri tipinin derinliklerine
doğru ilk kulaçlarımızı atalım.</p>
<p>Python programlama dilindeki sözlük veri tipi, gerçek hayatta ‘sözlük’ denince
aklınıza gelen şeye çok benzer. Mesela gerçek hayatta ‘kitap’ kelimesinin
İngilizce bir sözlükteki karşılığı <em>book</em> kelimesidir. Dolayısıyla ‘kitap’ ve
‘<em>book</em>’ kelimeleri arasındaki ilişkiyi herhalde şu şekilde temsil edebiliriz:</p>
<blockquote>
<div><p>kitap: book</p>
</div></blockquote>
<p>Bu manzara bize ‘kitap’ kelimesinin karşılığının ‘<em>book</em>’ olduğunu açık bir
şekilde gösteriyor. Eğer bu durumu Python’daki sözlük veri tipiyle göstermek
isteseydik şöyle bir şey yazacaktık:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">kelimeler</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"kitap"</span><span class="p">:</span> <span class="s2">"book"</span><span class="p">}</span>
</pre></div>
</div>
<p>Burada, içeriği sözlük veri tipi olan <cite>kelimeler</cite> adlı bir değişken tanımladık.
Gördüğünüz gibi, listelere benzer bir şekilde sözlük veri tipi de içinde farklı
veri tiplerini barındıran, ‘kapsayıcı’ bir veri tipidir. Burada sözlüğümüz iki
adet karakter dizisinden oluşuyor.</p>
<p>Yukarıdaki sözlüğü nasıl tanımladığımıza çok dikkat edin. Nasıl ki listelerin
ayırt edici özelliği köşeli parantezlerdi, sözlüklerin ayırt edici özelliği de
küme parantezleridir.</p>
<p>Esasında sözlük dediğimiz şey en basit haliyle şöyle görünür:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{}</span>
</pre></div>
</div>
<p>Bu örnek boş bir sözlüktür. İsterseniz yukarıdaki veri tipinin gerçekten de bir
sözlük olduğunu kanıtlayalım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">type</span><span class="p">(</span><span class="n">sözlük</span><span class="p">)</span>
<span class="go"><class 'dict'></span>
</pre></div>
</div>
<p>Sözlüklerin Python programlama dilindeki teknik karşılığı <code class="docutils literal notranslate"><span class="pre">dict</span></code> ifadesidir.
<code class="docutils literal notranslate"><span class="pre">type(sözlük)</span></code> sorgusu <code class="docutils literal notranslate"><span class="pre"><class</span> <span class="pre">'dict'></span></code> çıktısı verdiğine göre, <cite>sözlük</cite>
adlı değişkenin gerçekten de bir sözlük olduğunu söyleyebiliyoruz.</p>
<p>Yukarıda şöyle bir sözlük örneği verdiğimizi hatırlıyorsunuz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">kelimeler</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"kitap"</span><span class="p">:</span> <span class="s2">"book"</span><span class="p">}</span>
</pre></div>
</div>
<p>Python programlama diline özellikle yeni başlayanlar, sözlüklerin görünüşü
nedeniyle bir sözlükteki öğe sayısı konusunda tereddüte kapılabilir, örneğin
yukarıdaki sözlüğün <cite>2</cite> öğeden oluştuğu yanılgısına düşebilir. O halde bu
noktada size şöyle bir soru sormama izin verin: Acaba bu sözlükte kaç öğe var?
Hemen bakalım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">len</span><span class="p">(</span><span class="n">kelimeler</span><span class="p">)</span>
<span class="go">1</span>
</pre></div>
</div>
<p>Demek ki elimizdeki veri tipi bir adet öğeye sahip bir sözlükmüş. Gördüğünüz
gibi, <code class="docutils literal notranslate"><span class="pre">"kitap":</span> <span class="pre">"book"</span></code> ifadesi tek başına bir öğe durumundadır. Yani burada
<cite>“kitap”</cite> karakter dizisini ayrı, <cite>“book”</cite> karakter dizisini ayrı bir öğe olarak
almıyoruz. Bu ikisi tek bir sözlük öğesi oluşturuyor. Hatırlarsanız, listelerde
öğeleri birbirinden ayırmak için virgül işaretlerinden yararlanıyorduk.
Sözlüklerde de birden fazla öğeyi birbirinden ayırmak için virgül işaretlerinden
yararlanacağız:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">kelimeler</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"kitap"</span><span class="p">:</span> <span class="s2">"book"</span><span class="p">,</span> <span class="s2">"bilgisayar"</span><span class="p">:</span> <span class="s2">"computer"</span><span class="p">}</span>
</pre></div>
</div>
<p>Bir önceki örnek tek öğeliydi. Bu sözlük ise <cite>2</cite> öğeye sahiptir:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">len</span><span class="p">(</span><span class="n">kelimeler</span><span class="p">)</span>
<span class="go">2</span>
</pre></div>
</div>
<p>İlk derslerimizden bu yana sürekli olarak vurguladığımız gibi, Python
programlama dilinde doğru kod yazmak kadar okunaklı kod yazmak da çok önemlidir.
Mesela bir sözlüğü şöyle tanımladığımızda kodlarımızın pek okunaklı olmayacağını
söyleyebiliriz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"kitap"</span><span class="p">:</span> <span class="s2">"book"</span><span class="p">,</span> <span class="s2">"bilgisayar"</span><span class="p">:</span> <span class="s2">"computer"</span><span class="p">,</span> <span class="s2">"programlama"</span><span class="p">:</span> <span class="s2">"programming"</span><span class="p">,</span>
<span class="s2">"dil"</span><span class="p">:</span> <span class="s2">"language"</span><span class="p">,</span> <span class="s2">"defter"</span><span class="p">:</span> <span class="s2">"notebook"</span><span class="p">}</span>
</pre></div>
</div>
<p>Teknik olarak baktığımızda bu kodlarda hiçbir problem yok. Ancak sözlükleri
böyle sağa doğru uzayacak şekilde tanımladığımızda okunaklılığı azaltmış
oluyoruz. Bu yüzden yukarıdaki sözlüğü şöyle yazmayı tercih edebiliriz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"kitap"</span> <span class="p">:</span> <span class="s2">"book"</span><span class="p">,</span>
<span class="s2">"bilgisayar"</span> <span class="p">:</span> <span class="s2">"computer"</span><span class="p">,</span>
<span class="s2">"programlama"</span><span class="p">:</span> <span class="s2">"programming"</span><span class="p">,</span>
<span class="s2">"dil"</span> <span class="p">:</span> <span class="s2">"language"</span><span class="p">,</span>
<span class="s2">"defter"</span> <span class="p">:</span> <span class="s2">"notebook"</span><span class="p">}</span>
</pre></div>
</div>
<p>Bu şekilde sözlükteki öğeler arasındaki ilişki daha belirgin, yazdığınız kodlar
da daha okunaklı bir hale gelecektir.</p>
<p>Python’da bir sözlük oluşturmanın başka yolları da olmakla birlikte, en temel
sözlük oluşturma yöntemi yukarıdaki örneklerde gösterdiğimiz gibidir. Biz
ilerleyen sayfalarda sözlük oluşturmanın farklı yöntemlerini de ele alacağız.
Ancak şimdilik ‘sözlük tanımlama’ konusunu burada noktalayıp sözlüklerle ilgili
önemli bir konuya daha değinelim.</p>
</div>
<div class="section" id="sozluk-ogelerine-erismek">
<h2>Sözlük Öğelerine Erişmek<a class="headerlink" href="#sozluk-ogelerine-erismek" title="Bu başlık için kalıcı bağlantı">¶</a></h2>
<p>Yukarıdaki örneklerden bir sözlüğün en basit şekilde nasıl tanımlanacağını
öğrendik. Peki tanımladığımız bir sözlüğün öğelerine nasıl erişeceğiz?</p>
<p>Hemen basit bir örnek verelim. Daha önce tanımladığımız şu sözlüğe bir bakalım
mesela:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"kitap"</span> <span class="p">:</span> <span class="s2">"book"</span><span class="p">,</span>
<span class="s2">"bilgisayar"</span> <span class="p">:</span> <span class="s2">"computer"</span><span class="p">,</span>
<span class="s2">"programlama"</span><span class="p">:</span> <span class="s2">"programming"</span><span class="p">,</span>
<span class="s2">"dil"</span> <span class="p">:</span> <span class="s2">"language"</span><span class="p">,</span>
<span class="s2">"defter"</span> <span class="p">:</span> <span class="s2">"notebook"</span><span class="p">}</span>
</pre></div>
</div>
<p>Bu sözlükte birtakım Türkçe kelimeler ve bunların İngilizce karşılıkları var.
Şimdi mesela bu sözlükteki ‘kitap’ adlı öğeye erişelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">sözlük</span><span class="p">[</span><span class="s2">"kitap"</span><span class="p">])</span>
</pre></div>
</div>
<p>Bu kodları çalıştırdığımızda şöyle bir çıktı alırız:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">book</span>
</pre></div>
</div>
<p>Yukarıdaki örnekten anladığımız gibi, sözlük öğelerine erişmek için şöyle bir
formül kullanıyoruz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">sözlük</span><span class="p">[</span><span class="n">sözlük_öğesinin_adı</span><span class="p">]</span>
</pre></div>
</div>
<p>Aynı şekilde <cite>sözlük</cite> değişkeni içindeki ‘bilgisayar’ öğesinin karşılığını almak
istersek şöyle bir kod yazıyoruz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">sözlük</span><span class="p">[</span><span class="s2">"bilgisayar"</span><span class="p">])</span>
</pre></div>
</div>
<p>Bu da bize <cite>“computer”</cite> çıktısını veriyor.</p>
<p>Karakter dizilerini anlatırken verdiğimiz <cite>çeviri_tablosu</cite> adlı sözlüğe ve orada
anlattıklarımıza geri dönelim şimdi. Artık sözlük adlı veri tipiyle iyiden iyiye
tanıştığımıza göre, orada anlattıklarımız zihninizde daha net bir hale gelmiş
olmalı.</p>
<p>Oradaki tablomuz şöyleydi:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">çeviri_tablosu</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Ö"</span><span class="p">:</span> <span class="s2">"O"</span><span class="p">,</span>
<span class="s2">"ç"</span><span class="p">:</span> <span class="s2">"c"</span><span class="p">,</span>
<span class="s2">"Ü"</span><span class="p">:</span> <span class="s2">"U"</span><span class="p">,</span>
<span class="s2">"Ç"</span><span class="p">:</span> <span class="s2">"C"</span><span class="p">,</span>
<span class="s2">"İ"</span><span class="p">:</span> <span class="s2">"I"</span><span class="p">,</span>
<span class="s2">"ı"</span><span class="p">:</span> <span class="s2">"i"</span><span class="p">,</span>
<span class="s2">"Ğ"</span><span class="p">:</span> <span class="s2">"G"</span><span class="p">,</span>
<span class="s2">"ö"</span><span class="p">:</span> <span class="s2">"o"</span><span class="p">,</span>
<span class="s2">"ş"</span><span class="p">:</span> <span class="s2">"s"</span><span class="p">,</span>
<span class="s2">"ü"</span><span class="p">:</span> <span class="s2">"u"</span><span class="p">,</span>
<span class="s2">"Ş"</span><span class="p">:</span> <span class="s2">"S"</span><span class="p">,</span>
<span class="s2">"ğ"</span><span class="p">:</span> <span class="s2">"g"</span><span class="p">}</span>
</pre></div>
</div>
<p>Mesela bu sözlükteki <cite>“Ö”</cite> öğesinin karşılığını elde etmek için şöyle bir kod
yazdığımızı gayet iyi hatırlıyorsunuz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"Ö"</span><span class="p">])</span>
</pre></div>
</div>
<p>Bu kodları bir dosyaya kaydedip çalıştırdığımızda şöyle bir çıktı alıyorduk:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">O</span>
</pre></div>
</div>
<p>Gördüğünüz gibi sözlükteki <cite>“Ö”</cite> adlı öğeyi parantez içinde belirttiğimiz zaman,
Python bize bu öğenin karşısındaki değeri veriyor. Dolayısıyla sözlük içinde
<cite>“Ö”</cite> öğesinin karşılığı <cite>“O”</cite> harfi olduğu için de çıktımız <cite>“O”</cite> oldu.</p>
<p>Sözlüğün öteki öğelerini ise şu şekilde alabiliyoruz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"Ö"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"ç"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"Ü"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"Ç"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"İ"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"ı"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"Ğ"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"ö"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"Ş"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"ğ"</span><span class="p">])</span>
</pre></div>
</div>
<p>Ancak kod tekrarından kaçınmak için yukarıdaki kodları şu şekilde sadeleştirme
imkanımızın da olduğunu biliyorsunuz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">çeviri_tablosu</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</pre></div>
</div>
<p>Gördüğünüz gibi, sözlük içinde iki nokta üst üste işaretinin sol tarafında
görünen öğeleri köşeli parantez içinde yazarak, iki nokta üst üste işaretinin
sağ tarafındaki değerleri elde edebiliyoruz.</p>
<p>Eğer bir sözlük içinde bulunmayan bir öğeye erişmeye çalışırsak Python bize
<code class="docutils literal notranslate"><span class="pre">KeyError</span></code> tipinde bir hata mesajı verecektir. Mesela yukarıdaki sözlüğü temel
alacak olursak şöyle bir sorgu hata verecektir:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"Z"</span><span class="p">])</span>
<span class="gt">Traceback (most recent call last):</span>
File <span class="nb">"deneme.py"</span>, line <span class="m">14</span>, in <span class="n"><module></span>
<span class="nb">print</span><span class="p">(</span><span class="n">çeviri_tablosu</span><span class="p">[</span><span class="s2">"Z"</span><span class="p">])</span>
<span class="gr">KeyError</span>: <span class="n">'Z'</span>
</pre></div>
</div>
<p>Sözlükte <cite>“Z”</cite> kaydı bulunmadığı için doğal olarak Python’ın bize bir hata
mesajı göstermekten başka çaresi kalmıyor.</p>
<p>Sözlükler ile ilgili epey bilgi edindik. Dilerseniz bu öğrendiklerimizi örnek
bir uygulama üzerinde somutlaştırmaya çalışalım. Mesela Python’daki sözlükleri
kullanarak basit bir telefon defteri uygulaması yazalım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">telefon_defteri</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ahmet öz"</span> <span class="p">:</span> <span class="s2">"0532 532 32 32"</span><span class="p">,</span>
<span class="s2">"mehmet su"</span><span class="p">:</span> <span class="s2">"0543 543 42 42"</span><span class="p">,</span>
<span class="s2">"seda naz"</span> <span class="p">:</span> <span class="s2">"0533 533 33 33"</span><span class="p">,</span>
<span class="s2">"eda ala"</span> <span class="p">:</span> <span class="s2">"0212 212 12 12"</span><span class="p">}</span>
<span class="n">kişi</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">"Telefon numarasını öğrenmek için bir kişi adı girin: "</span><span class="p">)</span>
<span class="n">cevap</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> adlı kişinin telefon numarası: </span><span class="si">{}</span><span class="s2">"</span>
<span class="nb">print</span><span class="p">(</span><span class="n">cevap</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">kişi</span><span class="p">,</span> <span class="n">telefon_defteri</span><span class="p">[</span><span class="n">kişi</span><span class="p">]))</span>
</pre></div>
</div>
<p>Burada öncelikle isimler ve telefon numaralarından oluşan, sözlük veri tipinde
bir telefon defteri oluşturduk:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">telefon_defteri</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ahmet öz"</span> <span class="p">:</span> <span class="s2">"0532 532 32 32"</span><span class="p">,</span>
<span class="s2">"mehmet su"</span><span class="p">:</span> <span class="s2">"0543 543 42 42"</span><span class="p">,</span>
<span class="s2">"seda naz"</span> <span class="p">:</span> <span class="s2">"0533 533 33 33"</span><span class="p">,</span>
<span class="s2">"eda ala"</span> <span class="p">:</span> <span class="s2">"0212 212 12 12"</span><span class="p">}</span>
</pre></div>
</div>
<p>Bu kodlarda bilmediğimiz hiçbir şey yok. Sözlüklere dair öğrendiklerimizi
kullanarak oluşturduğumuz oldukça basit bir sözlüktür bu.</p>
<p>Daha sonra kullanıcıdan, telefon numarasını öğrenmek için bir kişi adı girmesini
istiyoruz. Bunu da şu kodlar yardımıyla yapıyoruz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">kişi</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">"Telefon numarasını öğrenmek için bir kişi adı girin: "</span><span class="p">)</span>
</pre></div>
</div>
<p>Ardından da telefon defterinde sorgulama yapacak olan kullanıcıya göstereceğimiz
cevap için bir şablon oluşturuyoruz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">cevap</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> adlı kişinin telefon numarası: </span><span class="si">{}</span><span class="s2">"</span>
</pre></div>
</div>
<p>Mesela kullanıcı <cite>“ahmet öz”</cite> ismini sorgulamışsa ona şöyle bir cevap
vereceğiz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="s2">"ahmet öz adlı kişinin telefon numarası 0532 532 32 32"</span>
</pre></div>
</div>
<p>Eğer aranan isim telefon defterinde varsa, bir önceki adımda tanımladığımız
cevap şablonuna göre kullanıcıyı bilgilendiriyoruz. Ama eğer isim defterde
yoksa, programımız hata veriyor. Bunu önlemek için şöyle bir kod
yazabilirsiniz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">telefon_defteri</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ahmet öz"</span> <span class="p">:</span> <span class="s2">"0532 532 32 32"</span><span class="p">,</span>
<span class="s2">"mehmet su"</span><span class="p">:</span> <span class="s2">"0543 543 42 42"</span><span class="p">,</span>
<span class="s2">"seda naz"</span> <span class="p">:</span> <span class="s2">"0533 533 33 33"</span><span class="p">,</span>
<span class="s2">"eda ala"</span> <span class="p">:</span> <span class="s2">"0212 212 12 12"</span><span class="p">}</span>
<span class="n">kişi</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">"Telefon numarasını öğrenmek için bir kişi adı girin: "</span><span class="p">)</span>
<span class="k">if</span> <span class="n">kişi</span> <span class="ow">in</span> <span class="n">telefon_defteri</span><span class="p">:</span>
<span class="n">cevap</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{}</span><span class="s2"> adlı kişinin telefon numarası: </span><span class="si">{}</span><span class="s2">"</span>
<span class="nb">print</span><span class="p">(</span><span class="n">cevap</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">kişi</span><span class="p">,</span> <span class="n">telefon_defteri</span><span class="p">[</span><span class="n">kişi</span><span class="p">]))</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Aradığınız kişi telefon rehberinde yok!"</span><span class="p">)</span>
</pre></div>
</div>
<p>Gördüğünüz gibi, <code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">kişi</span> <span class="pre">in</span> <span class="pre">telefon_defteri</span></code> satırı yardımıyla öncelikle
aranan ismin sözlükte olup olmadığını denetledik. Eğer aranan isim sözlükte yer
alıyorsa bu telefon numarasını kullanıcılarımıza gösteriyoruz. Aksi durumda
aranan kişinin telefon rehberinde olmadığı konusunda kullanıcılarımızı
bilgilendiriyoruz.</p>
<p>Gördüğünüz gibi, sözlükler gerçekten de bize Python programlama maceramızda
yepyeni olanakların kapısını açabilecek kadar güçlü bir veri tipi. Bu veri
tipini programlarınızda bolca kullanacaksınız.</p>
<p>Yukarıda verdiğimiz telefon defteri uygulamasına şöyle bir baktığınızda bu
uygulamanın aslında geliştirilmeye bir hayli açık olduğu dikkatinizi çekmiştir.
Mesela biz bu uygulamada sadece kendi tanımladığımız bir telefon defteri
üzerinden sorgulama yapmaya izin verdik. Örneğin kullanıcı bu telefon defterine
kendi isim-telefon çiftlerini giremiyor. Bu veri tipini etkili bir şekilde
kullanmamızı sağlayacak araçlardan henüz yoksun olduğumuz için yukarıda
tanımladığımız uygulama çok basit kaldı. O halde, sözlük veri tipini daha
verimli ve etkili bir biçimde kullanabilmek için hiç vakit kaybetmeden bu veri
tipinin derinliklerine doğru yol almaya devam edelim.</p>
</div>
<div class="section" id="sozluklerin-yapisi">
<h2>Sözlüklerin Yapısı<a class="headerlink" href="#sozluklerin-yapisi" title="Bu başlık için kalıcı bağlantı">¶</a></h2>
<p>Yukarıdaki örneklerden, Python’da bir sözlüğün nasıl tanımlanacağını ve bir
sözlüğün öğelerine nasıl erişileceğini öğrendik. Gelin isterseniz şimdi sözlük
veri tipinin yapısına ilişkin bazı ayrıntıları inceleyelim.</p>
<p>Mesela şu örneği tekrar önümüze alalım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"kitap"</span><span class="p">:</span> <span class="s2">"book"</span><span class="p">}</span>
</pre></div>
</div>
<p>Burada iki nokta üst üste işaretinden önce ve sonra birer tane karakter dizisi
görüyoruz. Bu karakter dizileri <cite>“kitap”</cite> ve <cite>“book”</cite>. Dediğimiz gibi, sözlükler
de tıpkı listeler gibi, farklı veri tiplerinin bir araya gelmesi ile oluşan
birleşik/kapsayıcı bir veri tipidir. Dolayısıyla bir sözlük içinde sadece
karakter dizilerini değil, başka veri tiplerini de görebilirsiniz. İlerleyen
sayfalarda sözlüklere ilişkin daha karmaşık örnekler verdiğimizde sözlüklerin
hangi veri tiplerini içerebileceğini de göreceğiz.</p>
<p>Ne dedik? Sözlük içinde iki nokta üst üste işaretinin solunda ve sağında
<cite>“kitap”</cite> ve <cite>“book”</cite> adlı karakter dizileri var. Teknik olarak, iki nokta üst
üste işaretinin solundaki karakter dizisine ‘anahtar’ (<em>key</em>), sağındaki
karakter dizisine ise ‘değer’ (<em>value</em>) adı verilir. Bu bilgilere bakarak sözlük
için şöyle bir tanım verebiliriz:</p>
<blockquote>
<div><p>Sözlükler; anahtar ve değer çiftlerinin birbirleriyle eşleştirildiği bir
veri tipidir. Dolayısıyla sözlükler bu anahtar ve değer çiftleri arasında
birebir ilişki kurar.</p>
</div></blockquote>
<p>Mesela yukarıdaki örnekte <cite>“kitap”</cite> öğesi anahtar, <cite>“book”</cite> öğesi ise değerdir.
İşte sözlük dediğimiz şey, bu anahtar ve değer çifti arasında birebir ilişki
kuran bir veri tipidir. Yani sözlük adlı veri tipi, bir anahtarı bir değerle
eşleştirme görevi görür.</p>
<p>Sözlüklerin bu özelliğini, sözlük öğelerine erişirken gayet net bir şekilde
görebiliyoruz.</p>
<p>Yukarıdaki örneklerde tanımladığımız sözlüklerde sadece karakter dizilerini
kullandık. Ama aslında sözlükler farklı veri tiplerinden oluşabilir. Mesela:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"sıfır"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">"bir"</span> <span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">"iki"</span> <span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
<span class="s2">"üç"</span> <span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
<span class="s2">"dört"</span> <span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
<span class="s2">"beş"</span> <span class="p">:</span> <span class="mi">5</span><span class="p">}</span>
</pre></div>
</div>
<p>Burada sözlük içinde hem sayıları hem de karakter dizilerini kullandık. Aynı
şekilde sözlük içinde listelere de yer verebiliriz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Ahmet Özkoparan"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"İstanbul"</span><span class="p">,</span> <span class="s2">"Öğretmen"</span><span class="p">,</span> <span class="mi">34</span><span class="p">],</span>
<span class="s2">"Mehmet Yağız"</span> <span class="p">:</span> <span class="p">[</span><span class="s2">"Adana"</span><span class="p">,</span> <span class="s2">"Mühendis"</span><span class="p">,</span> <span class="mi">40</span><span class="p">],</span>
<span class="s2">"Seda Bayrak"</span> <span class="p">:</span> <span class="p">[</span><span class="s2">"İskenderun"</span><span class="p">,</span> <span class="s2">"Doktor"</span><span class="p">,</span> <span class="mi">30</span><span class="p">]}</span>
</pre></div>
</div>
<p>Mesela bu sözlükte <cite>“Seda Bayrak”</cite> adlı kişinin bilgilerine ulaşmak istersek
şöyle bir kod yazabiliriz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">sözlük</span><span class="p">[</span><span class="s2">"Seda Bayrak"</span><span class="p">])</span>
</pre></div>
</div>
<p>Bu kod bize şöyle bir çıktı verecektir:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="s1">'İskenderun'</span><span class="p">,</span> <span class="s1">'Doktor'</span><span class="p">,</span> <span class="mi">30</span><span class="p">]</span>
</pre></div>
</div>
<p>Gördüğünüz gibi, sözlük içinde <cite>“Seda Bayrak”</cite> adlı öğenin karşısındaki bilgi
listesine ulaşabildik.</p>
<p>İstersek sözlükleri, içlerinde başka sözlükleri barındıracak şekilde de
tanımlayabiliriz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">kişiler</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Ahmet Özkoparan"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"Memleket"</span><span class="p">:</span> <span class="s2">"İstanbul"</span><span class="p">,</span>
<span class="s2">"Meslek"</span> <span class="p">:</span> <span class="s2">"Öğretmen"</span><span class="p">,</span>
<span class="s2">"Yaş"</span> <span class="p">:</span> <span class="mi">34</span><span class="p">},</span>
<span class="s2">"Mehmet Yağız"</span> <span class="p">:</span> <span class="p">{</span><span class="s2">"Memleket"</span><span class="p">:</span> <span class="s2">"Adana"</span><span class="p">,</span>
<span class="s2">"Meslek"</span> <span class="p">:</span> <span class="s2">"Mühendis"</span><span class="p">,</span>
<span class="s2">"Yaş"</span> <span class="p">:</span> <span class="mi">40</span><span class="p">},</span>
<span class="s2">"Seda Bayrak"</span> <span class="p">:</span> <span class="p">{</span><span class="s2">"Memleket"</span><span class="p">:</span> <span class="s2">"İskenderun"</span><span class="p">,</span>
<span class="s2">"Meslek"</span> <span class="p">:</span> <span class="s2">"Doktor"</span><span class="p">,</span>
<span class="s2">"Yaş"</span> <span class="p">:</span> <span class="mi">30</span><span class="p">}}</span>
</pre></div>
</div>
<p>Böylece şöyle kodlar yazabiliriz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">kişiler</span><span class="p">[</span><span class="s2">"Mehmet Yağız"</span><span class="p">][</span><span class="s2">"Memleket"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">kişiler</span><span class="p">[</span><span class="s2">"Seda Bayrak"</span><span class="p">][</span><span class="s2">"Yaş"</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">kişiler</span><span class="p">[</span><span class="s2">"Ahmet Özkoparan"</span><span class="p">][</span><span class="s2">"Meslek"</span><span class="p">])</span>
</pre></div>
</div>
<p>Yukarıdaki yapının benzerini listeler konusundan hatırlıyor olmalısınız. İç içe
geçmiş listelerin öğelerine ulaşırken de buna benzer bir sözdiziminden
yararlanıyorduk. Örneğin:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">liste</span> <span class="o">=</span> <span class="p">[[</span><span class="s2">"Ahmet"</span><span class="p">,</span> <span class="s2">"Mehmet"</span><span class="p">,</span> <span class="s2">"Ayşe"</span><span class="p">],</span>
<span class="p">[</span><span class="s2">"Sedat"</span><span class="p">,</span> <span class="s2">"Serkan"</span><span class="p">,</span> <span class="s2">"Selin"</span><span class="p">],</span>
<span class="p">[</span><span class="s2">"Zeynep"</span><span class="p">,</span> <span class="s2">"Nur"</span><span class="p">,</span> <span class="s2">"Eda"</span><span class="p">]]</span>
</pre></div>
</div>
<p>Burada bir liste içinde iç içe geçmiş üç farklı liste ile karşı karşıyayız.
Mesela ilk listenin ilk öğesi olan <cite>“Ahmet”</cite> adlı öğeye erişmek istersek şöyle
bir kod yazmamız gerekiyor:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">liste</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
</pre></div>
</div>
<p>İşte iç içe geçmiş sözlüklerin öğelerine ulaşmak için de buna benzer bir kod
yazmamız gerekiyor. Örneğin <cite>kişiler</cite> adlı sözlükteki <cite>“Mehmet Yağız”</cite> adlı
kişinin yaşına ulaşmak istersek şöyle bir şey yazacağız:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">kişiler</span><span class="p">[</span><span class="s2">"Mehmet Yağız"</span><span class="p">][</span><span class="s2">"Yaş"</span><span class="p">])</span>
</pre></div>
</div>
<p>Gelin isterseniz <cite>kişiler</cite> adlı sözlüğü kullanarak basit bir irtibat listesi
uygulaması yazalım. Böylece sözlüklere elimizi alıştırmış oluruz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">kişiler</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Ahmet Özkoparan"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"Memleket"</span><span class="p">:</span> <span class="s2">"İstanbul"</span><span class="p">,</span>
<span class="s2">"Meslek"</span> <span class="p">:</span> <span class="s2">"Öğretmen"</span><span class="p">,</span>
<span class="s2">"Yaş"</span> <span class="p">:</span> <span class="mi">34</span><span class="p">},</span>
<span class="s2">"Mehmet Yağız"</span> <span class="p">:</span> <span class="p">{</span><span class="s2">"Memleket"</span><span class="p">:</span> <span class="s2">"Adana"</span><span class="p">,</span>
<span class="s2">"Meslek"</span> <span class="p">:</span> <span class="s2">"Mühendis"</span><span class="p">,</span>
<span class="s2">"Yaş"</span> <span class="p">:</span> <span class="mi">40</span><span class="p">},</span>
<span class="s2">"Seda Bayrak"</span> <span class="p">:</span> <span class="p">{</span><span class="s2">"Memleket"</span><span class="p">:</span> <span class="s2">"İskenderun"</span><span class="p">,</span>
<span class="s2">"Meslek"</span> <span class="p">:</span> <span class="s2">"Doktor"</span><span class="p">,</span>
<span class="s2">"Yaş"</span> <span class="p">:</span> <span class="mi">30</span><span class="p">}}</span>
<span class="n">isim</span> <span class="o">=</span> <span class="s2">"Hakkında ayrıntılı bilgi edinmek </span><span class="se">\</span>
<span class="s2">istediğiniz kişinin adını girin: "</span>
<span class="n">arama</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="n">isim</span><span class="p">)</span>
<span class="n">ayrıntı</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">"Memleket/Meslek/Yaş? "</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">kişiler</span><span class="p">[</span><span class="n">arama</span><span class="p">][</span><span class="n">ayrıntı</span><span class="p">])</span>
</pre></div>
</div>
<p>Tıpkı bir önceki telefon defteri uygulamamız gibi, bu irtibat listesi uygulaması
da geliştirilmeye açıktır. Ancak henüz bu iki uygulamayı geliştirmemizi
sağlayacak bilgilerden yoksunuz. Bu uygulamaları istediğimiz kıvama sokabilmek
için sözlüklere dair öğrenmemiz gereken başka şeyler de var.</p>
<p>Sözlüklerin öteki veri tiplerinden önemli bir farkı, sözlük içinde yer
alan öğelerin herhangi bir sıralama mantığına sahip olmamasıdır. Yani sözlükteki
öğeler açısından ‘sıra’ diye bir kavram yoktur.</p>
<p>Örneğin bir liste, demet veya karakter dizisi içindeki öğelere; bu öğelerin o
liste, demet veya karakter dizisi içindeki sıralarına göre erişebilirsiniz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">liste</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Ahmet"</span><span class="p">,</span> <span class="s2">"Mehmet"</span><span class="p">,</span> <span class="s2">"Zeynep"</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">liste</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="go">'Ahmet'</span>
<span class="gp">>>> </span><span class="n">liste</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="go">'Zeynep'</span>
</pre></div>
</div>
<p>Ancak sözlükler açısından böyle bir şey söz konusu değildir:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'elma'</span><span class="p">:</span> <span class="s1">'apple'</span><span class="p">,</span>
<span class="gp">... </span> <span class="s1">'armut'</span><span class="p">:</span> <span class="s1">'pear'</span><span class="p">,</span>
<span class="gp">... </span> <span class="s1">'çilek'</span><span class="p">:</span> <span class="s1">'strawberry'</span><span class="p">}</span>
<span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="gt">Traceback (most recent call last):</span>
File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
<span class="gr">KeyError</span>: <span class="n">0</span>
</pre></div>
</div>
<p>Gördüğünüz gibi, sözlükler üzerinde sıralamaya dayalı bir sorgulama yapmaya
çalıştığımızda Python bize bir hata mesajı gösteriyor.</p>
<p>Bu durumun etkilerini şurada da görebilirsiniz:</p>
<p>Dikkatlice bakın:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="s1">'0'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">:</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">:</span> <span class="s1">'2'</span><span class="p">}</span>
<span class="gp">>>> </span><span class="n">sözlük</span>
<span class="go">{'a': '0', 'c': '2', 'b': '1'}</span>
</pre></div>
</div>
<p>Bu çıktıyı iyi inceleyin. Göreceğiniz gibi, çıktıda görünen öğeler bizim sözlüğü
tanımladığımız sıradaki gibi değil. Biz sözlüğü ‘a’, ‘b’ ve ‘c’ şeklinde
sıralayarak tanımladık, ama çıktı ‘a’, ‘c’ ve ‘b’ şeklinde oldu. O yüzden
sözlükler üzerinde çalışırken öğelerin sırasına dayalı herhangi bir işlem yapmak
hiç mantıklı değildir. Çünkü sözlükteki öğeleri tanımlarken kullandığınız
sıralama düzeninin çıktıda da aynen korunacağının herhangi bir garantisi
bulunmaz.</p>
</div>
<div class="section" id="sozluklere-oge-eklemek">
<h2>Sözlüklere Öğe Eklemek<a class="headerlink" href="#sozluklere-oge-eklemek" title="Bu başlık için kalıcı bağlantı">¶</a></h2>
<p>Tıpkı listeler gibi, sözlükler de büyüyüp küçülebilen bir veri tipidir. Yani bir
sözlüğü ilk kez tanımladıktan sonra istediğimiz zaman bu sözlüğe yeni öğeler
ekleyebilir veya varolan öğeleri çıkarabiliriz. Biz şimdi bir sözlüğe nasıl öğe
ekleyeceğimizi inceleyeceğiz.</p>
<p>Diyelim ki elimizde şöyle boş bir sözlük var:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{}</span>
</pre></div>
</div>
<p>Bu listeye öğe eklemek için şöyle bir formül kullanacağız:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="n">anahtar</span><span class="p">]</span> <span class="o">=</span> <span class="n">değer</span>
</pre></div>
</div>
<p>Bu formülü bir örnek üzerinden somutlaştıralım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="s2">"Ahmet"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"Adana"</span>
</pre></div>
</div>
<p>Böylece sözlüğe, anahtarı <cite>“Ahmet”</cite>, değeri ise <cite>“Adana”</cite> olan bir öğe eklemiş
olduk. Sözlüğümüzün son durumunu kontrol edelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">sözlük</span><span class="p">)</span>
<span class="go">{'Ahmet': 'Adana'}</span>
</pre></div>
</div>
<p>Gördüğünüz gibi, “Ahmet” öğesi sözlüğe eklendi. Artık bu öğeye normal yollardan
ulaşabiliriz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">sözlük</span><span class="p">[</span><span class="s2">"Ahmet"</span><span class="p">])</span>
<span class="go">Adana</span>
</pre></div>
</div>
<p>Elimiz alışsın diye sözlüğe öğe eklemeye devam edelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="s2">"Mehmet"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"İstanbul"</span>
<span class="gp">>>> </span><span class="n">sözlük</span>
<span class="go">{'Ahmet': 'Adana', 'Mehmet': 'İstanbul'}</span>
<span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="s2">"Seda"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"Mersin"</span>
<span class="gp">>>> </span><span class="n">sözlük</span>
<span class="go">{'Ahmet': 'Adana', 'Mehmet': 'İstanbul', 'Seda': 'Mersin'}</span>
<span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="s2">"Eda"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"Tarsus"</span>
<span class="gp">>>> </span><span class="n">sözlük</span>
<span class="go">{'Ahmet': 'Adana', 'Eda': 'Tarsus', 'Mehmet': 'İstanbul', 'Seda': 'Mersin'}</span>
</pre></div>
</div>
<p>Özellikle son çıktıya dikkatlice bakın. Sözlüğe en son <cite>“Eda”</cite> öğesini
eklemiştik. Ama sözlüğü ekrana bastığımızda bu öğenin sözlüğün sonuna değil
ortasına bir yere yerleştiğini görüyoruz. Bu durumun, sözlüklerin sırasız bir
veri tipi olmasından kaynaklandığını biliyorsunuz.</p>
<p>Gelin pratik olması açısından birkaç örnek daha verelim.</p>
<p>Elimizde şöyle bir sözlük olsun:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">personel</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Mehmet Öz"</span><span class="p">:</span> <span class="s2">"AR-GE Müdürü"</span><span class="p">,</span>
<span class="gp">... </span> <span class="s2">"Samet Söz"</span><span class="p">:</span> <span class="s2">"Genel Direktör"</span><span class="p">,</span>
<span class="gp">... </span> <span class="s2">"Sedat Gün"</span><span class="p">:</span> <span class="s2">"Proje Müdürü"</span><span class="p">}</span>
</pre></div>
</div>
<p>Şimdi bu sözlüğe <code class="docutils literal notranslate"><span class="pre">"Turgut</span> <span class="pre">Özben":</span> <span class="pre">"Mühendis"</span></code> anahtar-değer çiftini
ekleyelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">personel</span><span class="p">[</span><span class="s2">"Turgut Özben"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"Mühendis"</span>
</pre></div>
</div>
<p>Sözlüğümüzün son halini görelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">personel</span><span class="p">)</span>
<span class="go">{'Samet Söz': 'Genel Direktör', 'Mehmet Öz': 'AR-GE Müdürü', 'Turgut Özben':</span>
<span class="go">'Mühendis', 'Sedat Gün': 'Proje Müdürü'}</span>
</pre></div>
</div>
<p>Gördüğünüz gibi eklemek istediğimiz öğe sözlüğe eklenmiş. Ancak bu öğenin
sözlüğün en sonuna değil, sözlük içine rastgele bir şekilde yerleştirildiğine
dikkatinizi çekmek isterim. Çünkü, dediğimiz gibi, sözlükler sırasız bir veri
tipidir.</p>
<p>Gelin bu konuyu daha iyi anlamak için bir örnek daha verelim.</p>
<p>Önce <cite>notlar</cite> adında boş bir sözlük tanımlayalım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">notlar</span> <span class="o">=</span> <span class="p">{}</span>
</pre></div>
</div>
<p>Bu sözlüğe öğrencilerin sınavdan aldıkları notları ekleyeceğiz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">notlar</span><span class="p">[</span><span class="s2">"Ahmet"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">45</span>
<span class="gp">>>> </span><span class="n">notlar</span><span class="p">[</span><span class="s2">"Mehmet"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">77</span>
<span class="gp">>>> </span><span class="n">notlar</span><span class="p">[</span><span class="s2">"Seda"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">98</span>
<span class="gp">>>> </span><span class="n">notlar</span><span class="p">[</span><span class="s2">"Deniz"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">95</span>
<span class="gp">>>> </span><span class="n">notlar</span><span class="p">[</span><span class="s2">"Ege"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">95</span>
<span class="gp">>>> </span><span class="n">notlar</span><span class="p">[</span><span class="s2">"Zeynep"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span>
</pre></div>
</div>
<p>Sözlüğümüzün son halini görelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">notlar</span><span class="p">)</span>
<span class="go">{'Seda': 98, 'Ege': 95, 'Mehmet': 77, 'Zeynep': 100, 'Deniz': 95, 'Ahmet': 45}</span>
</pre></div>
</div>
<p>Bu noktada sözlüklerin önemli bir özelliğinden bahsetmemiz uygun olacak. Bir
sözlüğe değer olarak bütün veri tiplerini verebiliriz. Yani:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{}</span>
<span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="mi">1</span><span class="p">}</span>
<span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">)}</span>
<span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="s1">'kardiz'</span><span class="p">}</span>
<span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">]}</span>
</pre></div>
</div>
<p>Gördüğünüz gibi, sözlükler değer olarak her türlü veri tipini kabul ediyor. Ama
durum sözlük anahtarları açısından böyle değildir. Yani sözlüklere anahtar
olarak her veri tipini atayamayız. Bir değerin ‘anahtar’ olabilmesi için, o
öğenin değiştirilemeyen (<em>immutable</em>) bir veri tipi olması gerekir. Python’da
şimdiye kadar öğrendiğimiz şu veri tipleri değiştirilemeyen veri tipleridir:</p>
<ol class="arabic simple">
<li><p>Demetler</p></li>
<li><p>Sayılar</p></li>
<li><p>Karakter Dizileri</p></li>
</ol>
<p>Şu veri tipleri ise değiştirilebilen veri tipleridir:</p>
<ol class="arabic simple">
<li><p>Listeler</p></li>
<li><p>Sözlükler</p></li>
</ol>
<p>Dolayısıyla bir sözlüğe anahtar olarak ancak şu veri tiplerini ekleyebiliriz:</p>
<ol class="arabic simple">
<li><p>Demetler</p></li>
<li><p>Sayılar</p></li>
<li><p>Karakter Dizileri</p></li>
</ol>
<p>Şu kodları dikkatlice inceleyin:</p>
<p>Önce boş bir sözlük oluşturalım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{}</span>
</pre></div>
</div>
<p>Bu sözlüğe anahtar olarak bir demet ekleyelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">l</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'falanca'</span>
<span class="gp">>>> </span><span class="n">sözlük</span>
<span class="go">{(1, 2, 3): 'falanca'}</span>
</pre></div>
</div>
<p>Bir sayı ekleyelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">l</span> <span class="o">=</span> <span class="mi">45</span>
<span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'falanca'</span>
<span class="gp">>>> </span><span class="n">sözlük</span>
<span class="go">{45: 'falanca', (1, 2, 3): 'falanca'}</span>
</pre></div>
</div>
<p>Bir karakter dizisi ekleyelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">l</span> <span class="o">=</span> <span class="s1">'kardiz'</span>
<span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'falanca'</span>
<span class="gp">>>> </span><span class="n">sözlük</span>
<span class="go">{'kardiz': 'falanca', 45: 'falanca', (1, 2, 3): 'falanca'}</span>
</pre></div>
</div>
<p>Yukarıdakiler, değiştirilemeyen veri tipleri olduğu için sözlüklere anahtar
olarak eklenebildi.</p>
<p>Bir de şunlara bakalım:</p>
<p>Sözlüğümüze anahtar olarak bir liste eklemeye çalışalım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">l</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'falanca'</span>
<span class="gt">Traceback (most recent call last):</span>
File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
<span class="gr">TypeError</span>: <span class="n">unhashable type: 'list'</span>
</pre></div>
</div>
<p>Sözlüğümüze bir sözlük eklemeye çalışalım:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">l</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"a"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
<span class="gp">>>> </span><span class="n">sözlük</span><span class="p">[</span><span class="n">l</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'falanca'</span>
<span class="gt">Traceback (most recent call last):</span>
File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
<span class="gr">TypeError</span>: <span class="n">unhashable type: 'dict'</span>
</pre></div>
</div>
<p>Sözlüklerle çalışırken sözlüklerin bu özelliğine karşı uyanık olmalıyız.</p>
</div>
<div class="section" id="sozluk-ogeleri-uzerinde-degisiklik-yapmak">
<h2>Sözlük Öğeleri Üzerinde Değişiklik Yapmak<a class="headerlink" href="#sozluk-ogeleri-uzerinde-degisiklik-yapmak" title="Bu başlık için kalıcı bağlantı">¶</a></h2>
<p>Sözlükler değiştirilebilir veri tipleridir. Dolayısıyla sözlükler üzerinde
rahatlıkla istediğimiz değişikliği yapabiliriz.</p>
<p>Sözlükler üzerinde değişiklik yapma işlemi, biraz önce öğrendiğimiz, sözlüklere
yeni öğe ekleme işlemiyle aynıdır. Dikkatlice bakın:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">notlar</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'Seda'</span><span class="p">:</span> <span class="mi">98</span><span class="p">,</span> <span class="s1">'Ege'</span><span class="p">:</span> <span class="mi">95</span><span class="p">,</span> <span class="s1">'Mehmet'</span><span class="p">:</span> <span class="mi">77</span><span class="p">,</span>
<span class="gp">... </span><span class="s1">'Zeynep'</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span> <span class="s1">'Deniz'</span><span class="p">:</span> <span class="mi">95</span><span class="p">,</span> <span class="s1">'Ahmet'</span><span class="p">:</span> <span class="mi">45</span><span class="p">}</span>
</pre></div>
</div>
<p>Sözlüğümüz bu. Şimdi bu sözlükteki ‘Ahmet’ adlı kişinin <cite>45</cite> olan notunu <cite>65</cite>
olarak değiştirelim:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">notlar</span><span class="p">[</span><span class="s2">"Ahmet"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">65</span>
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">notlar</span><span class="p">)</span>
<span class="go">{'Seda': 98, 'Ege': 95, 'Mehmet': 77, 'Zeynep': 100, 'Deniz': 95, 'Ahmet': 65}</span>
</pre></div>
</div>
<p>Gördüğünüz gibi Ahmet’in notu <cite>65</cite> olarak değişmiş…</p>
</div>
<div class="section" id="sozluk-uretecleri-dictionary-comprehensions">
<h2>Sözlük Üreteçleri (<em>Dictionary Comprehensions</em>)<a class="headerlink" href="#sozluk-uretecleri-dictionary-comprehensions" title="Bu başlık için kalıcı bağlantı">¶</a></h2>
<p>Hatırlarsanız listeleri anlatırken liste üreteçleri adı bir kavramdan söz
etmiştik. Liste üreteçlerini kullanarak tek satırda ve hızlı bir şekilde
listeler oluşturabiliyorduk. Aynı şey sözlükler için de geçerlidir. Tıpkı liste
üreteçlerinde olduğu gibi, sözlük üreteçleri sayesinde tek satırda ve hızlı bir
şekilde sözlükler üretebiliriz.</p>
<p>Örneğin elimizde, Türkçe alfabedeki harfleri içeren <cite>harfler</cite> adlı şöyle bir
liste olduğunu düşünün:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">harfler</span> <span class="o">=</span> <span class="s1">'abcçdefgğhıijklmnoöprsştuüvyz'</span>
</pre></div>
</div>
<p>Amacımız bu harflerin her birine bir numara vermek. Yani nihai olarak şöyle bir
sözlük elde etmek istiyoruz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="s1">'ğ'</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
<span class="s1">'v'</span><span class="p">:</span> <span class="mi">26</span><span class="p">,</span>
<span class="s1">'ş'</span><span class="p">:</span> <span class="mi">22</span><span class="p">,</span>
<span class="s1">'u'</span><span class="p">:</span> <span class="mi">24</span><span class="p">,</span>
<span class="s1">'t'</span><span class="p">:</span> <span class="mi">23</span><span class="p">,</span>
<span class="s1">'ö'</span><span class="p">:</span> <span class="mi">18</span><span class="p">,</span>
<span class="s1">'ı'</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
<span class="s1">'p'</span><span class="p">:</span> <span class="mi">19</span><span class="p">,</span>
<span class="s1">'s'</span><span class="p">:</span> <span class="mi">21</span><span class="p">,</span>
<span class="s1">'r'</span><span class="p">:</span> <span class="mi">20</span><span class="p">,</span>
<span class="s1">'ü'</span><span class="p">:</span> <span class="mi">25</span><span class="p">,</span>
<span class="s1">'y'</span><span class="p">:</span> <span class="mi">27</span><span class="p">,</span>
<span class="s1">'ç'</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
<span class="s1">'z'</span><span class="p">:</span> <span class="mi">28</span><span class="p">,</span>
<span class="s1">'e'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
<span class="s1">'d'</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
<span class="s1">'g'</span><span class="p">:</span> <span class="mi">7</span><span class="p">,</span>
<span class="s1">'f'</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span>
<span class="s1">'a'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s1">'c'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
<span class="s1">'b'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s1">'m'</span><span class="p">:</span> <span class="mi">15</span><span class="p">,</span>
<span class="s1">'l'</span><span class="p">:</span> <span class="mi">14</span><span class="p">,</span>
<span class="s1">'o'</span><span class="p">:</span> <span class="mi">17</span><span class="p">,</span>
<span class="s1">'n'</span><span class="p">:</span> <span class="mi">16</span><span class="p">,</span>
<span class="s1">'i'</span><span class="p">:</span> <span class="mi">11</span><span class="p">,</span>
<span class="s1">'h'</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
<span class="s1">'k'</span><span class="p">:</span> <span class="mi">13</span><span class="p">,</span>
<span class="s1">'j'</span><span class="p">:</span> <span class="mi">12</span><span class="p">}</span>
</pre></div>
</div>
<p>Bunun için birkaç farklı yöntemden yararlanabiliriz. Örneğin:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{}</span>
<span class="gp">>>> </span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">harfler</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">sözlük</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">harfler</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</pre></div>
</div>
<p>veya:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{}</span>
<span class="gp">>>> </span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">harfler</span><span class="p">)):</span>
<span class="gp">... </span> <span class="n">sözlük</span><span class="p">[</span><span class="n">harfler</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">=</span> <span class="n">i</span>
</pre></div>
</div>
<p>İşte bu işlemleri sözlük üreteçlerini kullanarak çok daha hızlı ve pratik bir
şekilde halledebiliriz. Dikkatlice bakın:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:</span> <span class="n">harfler</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">harfler</span><span class="p">}</span>
</pre></div>
</div>
<p>Bir örnek daha verelim. Diyelim ki elinizde şöyle bir isim listesi var:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="n">isimler</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"ahmet"</span><span class="p">,</span> <span class="s2">"mehmet"</span><span class="p">,</span> <span class="s2">"fırat"</span><span class="p">,</span> <span class="s2">"zeynep"</span><span class="p">,</span> <span class="s2">"selma"</span><span class="p">,</span> <span class="s2">"abdullah"</span><span class="p">,</span> <span class="s2">"cem"</span><span class="p">]</span>
</pre></div>
</div>
<p>Amacınız, bu isimleri ve her bir ismin kaç harften oluştuğunu gösteren bir
sözlük elde etmek. Yani nihai olarak şöyle bir şey olsun istiyorsunuz elinizde:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="s1">'zeynep'</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span>
<span class="s1">'cem'</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
<span class="s1">'abdullah'</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
<span class="s1">'ahmet'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
<span class="s1">'mehmet'</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span>
<span class="s1">'fırat'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
<span class="s1">'selma'</span><span class="p">:</span> <span class="mi">5</span><span class="p">}</span>
</pre></div>
</div>
<p>İşte bu görev için de sözlük üreteçlerinden yararlanabilirsiniz:</p>
<div class="highlight-py3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">isimler</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"ahmet"</span><span class="p">,</span> <span class="s2">"mehmet"</span><span class="p">,</span> <span class="s2">"fırat"</span><span class="p">,</span> <span class="s2">"zeynep"</span><span class="p">,</span> <span class="s2">"selma"</span><span class="p">,</span> <span class="s2">"abdullah"</span><span class="p">,</span> <span class="s2">"cem"</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">sözlük</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">isimler</span><span class="p">}</span>
<span class="gp">>>> </span><span class="n">sözlük</span>
<span class="go">{'zeynep': 6, 'cem': 3, 'abdullah': 8, 'ahmet': 5, 'mehmet': 6, 'fırat': 5, 'selma': 5}</span>
</pre></div>
</div>
<p>Bildiğiniz gibi sözlükler, her biri birbirinden <cite>:</cite> işareti ile ayrılan birtakım
anahtar-değer çiftlerinden oluşuyor. İşte yukarıdaki sözlük üreteci yapısında
biz <cite>:</cite> işaretinin sol tarafına <cite>isimler</cite> adlı listedeki her bir öğeyi; sağ
tarafına da bu öğelerin uzunluklarını bir çırpıda ekliyoruz.</p>
</div>
</div>
<div class='glyph'><a href='https://yazbel.com'>♣</a></div>
<div class='extrarelbar'>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Gezinti</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="sozluklerin_metotlari.html" title="Sözlüklerin Metotları"
>sonraki</a></li>
<li class="right" >
<a href="baytlar_ve_bayt_dizileri.html" title="Baytlar (Bytes) ve Bayt Dizileri (Bytearrays)"
>önceki</a> |</li>
<li class="nav-item nav-item-0"><a href=".">⌂</a></li>
<li class="nav-item nav-item-this"><a href="">Sözlükler</a></li>
</ul>
</div> </div>
<div class='addcomment'>Yorumlar</div>
<div class='how-to-use'>
<h3>Önemli Not</h3>
Eğer yazdığınız yorum içinde kod kullanacaksanız, kodlarınızı
<span class='tag'><pre><code></span> etiketleri içine alın. Örneğin:
<pre>
<span class='tag'><pre><code class="python"></span>
<span class='keyword'>print</span>(<span class='string'>"Merhaba Dünya!"</span>)
<span class='tag'></code></pre></span>
</pre>
</div>
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES * * */
var disqus_shortname = 'istihza';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4eca48eb2d83faf9" async="async"></script>
<div class="clearer"></div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Gezinti</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="sozluklerin_metotlari.html" title="Sözlüklerin Metotları"
>sonraki</a></li>
<li class="right" >
<a href="baytlar_ve_bayt_dizileri.html" title="Baytlar (Bytes) ve Bayt Dizileri (Bytearrays)"
>önceki</a> |</li>
<li class="nav-item nav-item-0"><a href=".">⌂</a></li>
<li class="nav-item nav-item-this"><a href="">Sözlükler</a></li>
</ul>
</div>
<div class="footer">
© Copyright 2007-2020, Fırat Özgül | <a href="https://yazbel.com">yazbel.com</a>.
Son güncelleme: 08.08.2020.
<a href="http://sphinx-doc.org/">Sphinx</a> 3.2.0 kullanılarak oluşturuldu.
<br>
<br>
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img
alt="Creative Commons License" style="border-width:0"
src="https://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br />
<br>
</div>
<!-- Start of StatCounter Code for Default Guide -->
<script type="text/javascript">
var sc_project=10396326;
var sc_invisible=1;
var sc_security="fb5cd679";
var scJsHost = (("https:" == document.location.protocol) ?
"https://secure." : "http://www.");
document.write("<sc"+"ript type='text/javascript' src='" +
scJsHost+
"statcounter.com/counter/counter.js'></"+"script>");
</script>
<noscript><div class="statcounter"><a title="hit counter"
href="http://statcounter.com/" target="_blank"><img
class="statcounter"
src="http://c.statcounter.com/10396326/0/fb5cd679/1/"
alt="hit counter"></a></div></noscript>
<!-- End of StatCounter Code for Default Guide -->
</body>
</html>