Sözlüklerde sıralama

Merhabalar bir paragraftan oluşan bir yazım var, yazı dosyasından yazıları çektim ve bir kümeye atadım. Daha sonra yazıda her kelime kaç kere geçiyorsa buna bakan bir program yazdım ve bir sözlüğe de bunları “ve”:15 şeklinde atadım. Fakat başka bir sözlükte bunları en çok kullanılan kelimeden başlayaak şekilde sıralamak istiyorum keyleri tanımlayamıyorum çok fazla yol denedim hiçbiri işe yaramadı nasıl yapabilirim?

items() metodu ile, yapmak istediğin şeyi yapabilirsin diye düşünüyorum.

paragraf = """Kendisinden söz etmeyi kötü görmek,
yasak etmek adet olmuştur;
çünkü kendinden söz etmek her zaman kendini övmek gibi görünür.
Kendini övmek ise herkesin zıddına gider;
ama kendinden söz etmeyi yasak etmek, çocuğun burnunu silecek yerde,
burnunu koparmak olur.
Bu tedbirde insan kardan çok zarar görür."""

sozluk = {}

kelimeler = set(paragraf.split())

for kelime in kelimeler:
    sozluk.update({kelime: paragraf.count(kelime)})

print("Öncesi:", sozluk)

def bubblesort(sozluk):
    yerel_sozluk = {}
    j, k = 0, 0
    items = list(sozluk.items())
    for _ in range(len(sozluk)):
        for i in range(len(sozluk)):
            k = items[i][1]
            if k > j and i != 0:
                items[i - 1], items[i] = items[i], items[i - 1]
            j = k

    for key, item in items:
        yerel_sozluk.update({key: item})

    return yerel_sozluk
    
print("Sonrası:", bubblesort(sozluk))

Öncesi: {'söz': 3, 'kötü': 1, 'burnunu': 2, 'herkesin': 1, 'ise': 1, 'çok': 1, 'her': 2, 'kendinden': 2, 'zıddına': 1, 'kardan': 1, 'kendini': 1, 'çocuğun': 1, 'etmeyi': 2, 'adet': 1, 'koparmak': 1, 'görünür.': 1, 'olur.': 1, 'zaman': 1, 'zarar': 1, 'olmuştur;': 1, 'yerde,': 1, 'görür.': 1, 'gibi': 1, 'Kendini': 1, 'gider;': 1, 'ama': 2, 'etmek,': 1, 'yasak': 2, 'tedbirde': 1, 'övmek': 2, 'Kendisinden': 1, 'silecek': 1, 'etmek': 3, 'çünkü': 1, 'görmek,': 1, 'Bu': 1, 'insan': 1}
Sonrası: {'söz': 3, 'etmek': 3, 'burnunu': 2, 'her': 2, 'kendinden': 2, 'etmeyi': 2, 'ama': 2, 'yasak': 2, 'övmek': 2, 'kötü': 1, 'herkesin': 1, 'ise': 1, 'çok': 1, 'zıddına': 1, 'kardan': 1, 'kendini': 1, 'çocuğun': 1, 'adet': 1, 'koparmak': 1, 'görünür.': 1, 'olur.': 1, 'zaman': 1, 'zarar': 1, 'olmuştur;': 1, 'yerde,': 1, 'görür.': 1, 'gibi': 1, 'Kendini': 1, 'gider;': 1, 'etmek,': 1, 'tedbirde': 1, 'Kendisinden': 1, 'silecek': 1, 'çünkü': 1, 'görmek,': 1, 'Bu': 1, 'insan': 1}
  • bubblesort isimli bir fonksiyon tanımlıyoruz.

  • fonksiyon içerisinde yerel bir sözlük oluşturuyoruz.

  • Parametre olarak aldığımız sözlüğün key ve itemlerini içeren bir liste oluşturuyoruz ve bunu items isimli değişkene atıyoruz.

  • items = [("söz", 3), ("kötü", 1), ..., ("ise", 1)] gibi bir şey oluyor.

  • Görüldüğü üzere her bir key ve item, bir tuple içerisinde yer alıyor. Buna göre kolaylıkla item değerine ulaşabiliriz.

  • k = items[i][1], o anki indekse göre items içerisindeki tuple’dan item değeri çekiliyor. Önceki item değeri ile karşılaştırılıyor. (if k > j)

  • Eğer mevcut item değeri, önceki item değerinden büyük ise, bu iki indeksteki tuple’lar yer değiştiriyor. (items[i - 1], items[i] = items[i], items[i - 1])

  • Bu işlemleri items’in uzunluğu kadar kez tekrarlıyoruz. Son olarak items içerisindeki her bir key ve itemi sırasıyla yerel_sozluk içerisine kaydediyoruz.

for key, item in items:
        yerel_sozluk.update({key: item})
5 Beğeni

Yararlı oldu teşekkür ederim

1 Beğeni

Elindeki sozluk neye benziyor?
Elde etmek istedigin sozluk neye benziyor?

print({ k: v for k, v in sorted(oncesi.items(), key=lambda kv: -kv[1]) })

(-kv[1] yerine reverse=True daha okunakli olabilir)

3 Beğeni

Teşekkürler!

1 Beğeni