Liste-Sözlük Biri Beni Kurtarsın!

Şöyle bir şey yapabilirsiniz:

lst = [1, 2, 3, 4, 5, 2, 3, 1, 3, 3, 2, 4, 5]
arr = set(lst)
print(dict(zip(arr, [[i] for i in range(len(arr))])))
> {1: [0], 2: [1], 3: [2], 4: [3], 5: [4]}

Daha kullanışlı olması açısından bir fonksiyon yaratırsak:

lst = [1, 2, 3, 4, 5, 2, 3, 1, 3, 3, 2, 4, 5]
def key_index(arr):
    arr = set(arr)
    return dict(zip(arr, [[i] for i in range(len(arr))]))
print(key_index(lst))
> {1: [0], 2: [1], 3: [2], 4: [3], 5: [4]}

Bu durumun sebebine gelecek olursak bence bunu bir debugging ile çok daha iyi anlayabilirsiniz.
Şöyle buyurun: RecApp-2022-05-31-10:55:02
Debugging’i izlediğinizde göreceksiniz ki listelerin boş olmasının sebebi

l_ind listesinde .clear() metodunu çağırmanız. Bu satırı silerek s_ind’e bakacak olursak…

{1: [0, 7, 1, 5, 10, 2, 6, 8, 9, 3, 11, 4, 12], 2: [0, 7, 1, 5, 10, 2, 6, 8, 9, 3, 11, 4, 12], 3: [0, 7, 1, 5, 10, 2, 6, 8, 9, 3, 11, 4, 12], 4: [0, 7, 1, 5, 10, 2, 6, 8, 9, 3, 11, 4, 12], 5: [0, 7, 1, 5, 10, 2, 6, 8, 9, 3, 11, 4, 12]}

Böyle bir çıktı görüyoruz. Yine beklediğimiz çıktı değil elbette çünkü kodunuzda bir mantık hatası var gibi görünüyor.

Açıkçası burada ne yapmaya çalıştığınızı anlayamadım. Muhtemelen kodunuz beklemediğiniz gibi çalıştı, belki de iç içe for loop kullanmak işleri biraz komplike etmiş olabilir…

4 Beğeni