Python sözlükleri, verimli veri depolamanın temel taşlarından biridir. Genellikle, bir sözlüğün yalnızca anahtarlarına erişmeniz gerekir ve bunu başarmak için çeşitli yollar vardır. Bu makale, en yaygın yaklaşımları inceleyerek, performanslarını ve okunabilirliklerini karşılaştırarak ihtiyaçlarınız için en iyi yöntemi seçmenize yardımcı olur.
İçindekiler
dict.keys()
Metodu- Döngüler Kullanımı
- Liste Kavramaları
*
Operatörüyle Sözlük Açma- Performans Karşılaştırması
dict.keys()
Metodu
En basit ve genellikle en verimli yaklaşım, keys()
metodunu kullanmaktır. Bu metot, sözlüğün anahtarlarının dinamik bir gösterimi olan bir görünüm nesnesi döndürür. Liste elde etmek için bu görünümü list()
ile dönüştürmeniz yeterlidir.
my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = list(my_dict.keys())
print(keys_list) # Çıktı: ['a', 'b', 'c']
Bu metot, açıklığı ve hızı nedeniyle tercih edilir. keys()
anahtar alma için optimize edilmiştir ve listeye dönüştürme hızlı bir işlemdir.
Döngüler Kullanımı
Alternatif olarak, bir for
döngüsü kullanarak anahtarları çıkarabilirsiniz. Bu yaklaşım, dict.keys()
‘den daha az verimlidir ve genellikle daha az özlüdür.
my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = []
for key in my_dict:
keys_list.append(key)
print(keys_list) # Çıktı: ['a', 'b', 'c']
Bu, her bir anahtarı yineleyerek yeni bir listeye ekler. İşlevsel olsa da, diğer metotlardan daha az okunabilir ve daha yavaştır.
Liste Kavramaları
Liste kavramaları, açık döngülere kompakt ve genellikle daha hızlı bir alternatif sunar. Döngü metoduna göre daha verimlidirler, ancak yine de dict.keys()
‘den biraz daha yavaştırlar.
my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = [key for key in my_dict]
print(keys_list) # Çıktı: ['a', 'b', 'c']
Bu tek satır, döngüyle aynı sonucu, geliştirilmiş okunabilirlik ve döngünün kendisinden daha iyi performansla elde eder.
*
Operatörüyle Sözlük Açma
Açma operatörü (*
), anahtarları çıkarabilir, ancak bu özel görev için daha az yaygın ve daha az okunabilirdir. Sonucun listeye dönüştürülmesi gerekir.
my_dict = {'a': 1, 'b': 2, 'c': 3}
keys_list = list(*my_dict.keys())
print(keys_list) # Çıktı: ['a', 'b', 'c']
Bu yaklaşım, dict.keys()
‘den daha az sezgisel ve daha az verimlidir ve genellikle yalnızca anahtarların listesini elde etmek için kullanılmamalıdır.
Performans Karşılaştırması
timeit
modülünü kullanarak bu metotları karşılaştıralım:
import timeit
my_dict = {str(i): i for i in range(10000)}
time_keys = timeit.timeit(lambda: list(my_dict.keys()), number=1000)
time_loop = timeit.timeit(lambda: [key for key in my_dict], number=1000)
time_comprehension = timeit.timeit(lambda: [key for key in my_dict], number=1000) #Düzeltilmiş tekrar
time_unpack = timeit.timeit(lambda: list(*my_dict.keys()), number=1000)
print(f"dict.keys(): {time_keys:.6f} saniye")
print(f"Döngü: {time_loop:.6f} saniye")
print(f"Liste Kavraması: {time_comprehension:.6f} saniye")
print(f"Açma: {time_unpack:.6f} saniye")
dict.keys()
‘in en hızlı olduğunu, ardından liste kavramalarının, sonra döngünün ve açmanın en az verimli olduğunu sürekli olarak göreceksiniz. Zamanlamalar sisteme göre değişse de, göreli performans tutarlı kalır.
Özetle, birden fazla yaklaşım mevcut olsa da, list(my_dict.keys())
, sözlük anahtarlarını liste olarak almak için en iyi verimlilik, okunabilirlik ve Pythonik stil kombinasyonunu sunar.