Python da değer tutmak için, sıklıkla dictionary adı verilen 2 boyutlu liste gibi olan yapıları kullanmak durumunda kalabilirsiniz. Sözlük listesi olarak bahsedebileceğimiz bu listeler çoğunlukla, ilki benzeri olmayan key (anahtar) ve ikincisi ona karşılık gelen value (değer) olan ikililerden oluşur. Dictionary ler aslında sıralanacak şeyler değildir, yapı itibariyle onları gösterme şeklinizi ancak sıraya sokabilirsiniz ya da bu gösterimi alıp onunla yeni bir dictionary oluşturabilirsiniz. Bu sebeple önce var olan bir dictionary nin görüntüsünün nasıl sıralanıcağına değinelim. sorted() bu tür işlemleri yapmak için kullanılabilir:
import operator
sozluk = {2: 4, 4: 6, 1: 5, 7: 1, 12: 1, 9: 9, 8: 2}
sozlukListele = sorted(sozluk.items(), key=operator.itemgetter(1))
print(sozlukListele)
Yukarı gördüğünüz fonksiyon sözlüğü alıp "itemgetter(1)" olması sebebiyle value ya göre listeyi sıralıyor ve sonucu sozlukListele ye atıp sonra onu çıktı olarak veriyor. Eğer sondaki bu kısmı "itemgetter(0)" yaparsanız sıralamayı ilk öğe olan key e göre yapacaktır. "sozluk.items()," dan sonra "reverse=True," diye yeni bir paramatre eklerseniz bu sıralamayı sondan başa doğru yapacaktır. Eğer biraz dile ve listelere alıştıysanız, çözebileceğiniz üzere bu işlemi lambda ile yapmak da mümkün, bahsettiğim gibi sonuçta sözlük ekstra boyutlu bir liste ve yukarıdaki sorted kısmını şu şkeilde yaparak da aynı sonucu sağlayabilirsiniz: sorted(sozluk.items(), key=lambda x: x[1])
Bu işlem sözlüğün çıktısını sıraya koysa da ondan yeni bir sözlük oluşturmak sizin ayrı olarak gerçekleştirmeniz gereken bir eylem. Yine bunun için de birden fazla yöntem olsa da ben en hızlısını yukarıdaki bloğa yeni bir satır ekleyerek göstermek istiyorum.
import operator
sozluk = {2: 4, 4: 6, 1: 5, 7: 1, 12: 1, 9: 9, 8: 2}
sozlukListele = sorted(sozluk.items(), reverse=True, key=operator.itemgetter(1))
sozlukYeni = {key: value for (key, value) in sozlukListele}
print(sozlukYeni)
Görüldüğü üzere, değişiklik olması için yeni parametre olarak "reverse=True" kısmını ekledim. sozlukYeni diye bir sözlük oluşturup içini sozlukListele adlı liste ile doldurdum, sonra da onu print ile çıkarttım.