Listede yer alan elemanları harf sayısına göre kategorize etme

Amacım meyveler listesindeki kelimelerden harf sayısı eşit olanları bir kümede olacak şekilde bir sözlük oluşturmak. aşağıdaki kod satırı her key için sadece 1 meyve atıyor. aşağıdaki çıktıyı alabilmem için neyi farklı yapabilirim. Teşekkür ederim.
(<<<< olmasını istediğim çıktı:
{
3:[“muz”,“nar”],
4: [‘kivi’,“elma”,“erik”,“üzüm” ]
5: [‘havuç’, “armut”,“kiraz”,“kavun”]
6: [‘karpuz’],
7: [‘şeftali’],
8: [‘portakal’],
9: [‘mandalina’]
} <<<<<<
(kod satırı)
meyveler[“elma”,“armut”,“şeftali”,“kiraz”,“muz”,“erik”,“üzüm”,“nar”,“karpuz”,“kavun”,“kivi”,“havuç”,“portakal”,“mandalina”]
sozluk={}
t=set()
for i in meyveler:
t.add(len(i))
p=list(t)
for i in meyveler:
q=0
while q<len(p):
if len(i)==p[q]:
sozluk.update({p[q]:[i]})
q+=1
print(sozluk)

<<output: {
3:[‘nar’]
4: [‘kivi’],
5: [‘havuç’],
7: [‘şeftali’],
6:[‘karpuz’],
8: [‘portakal]’,
9: [‘mandalina]’
}

def meyveler():
    meyveler=["elma","armut","şeftali","kiraz","muz","erik","üzüm","nar","karpuz","kavun","kivi","havuç","portakal","mandalina"]
    sonuc=[]
    sayı=int(input("Sayı gir :"))
    for one in meyveler:
        if sayı==len(one):
            sonuc=sonuc+[one]
    
    else:
        if len(sonuc)==0:
            print("Bulunamadı")
        else:
            print(sonuc)
    

Çözüm:

meyveler = ["muz", "nar", "elma", "kivi", "ayva", "armut", "çilek"]

# uzunluklar isimli bir liste oluşturalım.
uzunluklar = []

# Her bir meyvenin harf uzunluğunu, uzunluklar listesine ekleyelim.
# Bunun için for döngüsü ve len() methodu kullanalım.
for meyve in meyveler:
    uzunluklar.append(len(meyve))

# Uzunluklar listesindeki değerlerin tekrar etmemesi için set() kullanalım.
uzunluklar = set(uzunluklar)

# Şimdi boş bir sözlük oluşturalım.
sozluk = {}

# iç içe for döngüsü ve count() kullanarak çözüme ulaşalım.
for uzunluk in uzunluklar:
    alt_liste = []
    for meyve in meyveler:
        if len(meyve) == uzunluk:
            alt_liste.append(meyve)
    sozluk.update({uzunluk: alt_liste})

print(sozluk)

Sİzin hatanız sanırım burada:

Orada listeye ekleme yapmak yerine her seferinde listeyi yeniden atıyorsunuz.
Mesela bir öncesinde [elma] iken, sonrasında [kivi] olarak değiştiriyorsunuz gibi.

1 Beğeni

bkz: Soru Sorarken Sıkça Düşülen Hatalar #1

Liste sozluk[p[q]] olduguna gore: sozluk[p[q]].append(i)

Liste yoksa yaratmayi okuyucuya biraktim.

teşekkür ederim. sorunun anladı çözüldü

2 Beğeni

teşekkür ederim sorunu anladım

meyveler=["elma","armut","şeftali","kiraz","muz","erik","üzüm","nar","karpuz","kavun","kivi","havuç","portakal","mandalina"]

# max 20 harfli meyve olsun
sonuc=[None] * 20 

# kaç harfli ise o index e koyuyoruz
for i in meyveler:
    index = len(i)
    if sonuc[index] is None:
        sonuc[index] = [i]
    else:
        sonuc[index].append(i)
# None olanları atlayarak değeri olanlardan sözlük yapıyor
res_dct = { i: sonuc[i] for i in range(len(sonuc)) if sonuc[i]}

print(res_dct)
1 Beğeni

Teşekkür Ederim. Farklı bir bakış açısı kazanmamı sağladınız.

import itertools

meyveler=["elma","armut","şeftali","kiraz","muz","erik","üzüm","nar","karpuz","kavun","kivi","havuç","portakal","mandalina"]

print({ k: list(g) for k, g in itertools.groupby(sorted(meyveler, key=len), key=len) })