Bu soruya verilen pek çok yanıta rağmen, çok az kişi sözlüklerin sırasız eşlemeler olduğunu ve bu nedenle (Python 3.7 ile ekleme sırasının kutsanmasına kadar) bir sözlükte kelimenin tam anlamıyla yapılmış "ilk" giriş fikrini belirtti. saçma. Ve hatta bir OrderedDict
bile yalnızca mydict[mydict.keys()[0]]
(Python 3'te keys()
abone olunamayan bir yineleyici olduğundan, yalnızca Python 2) gibi çirkinlikler kullanılarak sayısal indeksle erişilebilir .
3.7'den itibaren ve pratikte 3,6'da da - yeni davranış o zaman tanıtıldı, ancak 3.7'ye kadar dil spesifikasyonunun bir parçası olarak dahil edilmedi - bir diktenin anahtarları, değerleri veya öğeleri üzerinde yineleme (ve inanıyorum ki, set ayrıca) ilk olarak en son eklenen nesneleri verir. Bunlara sayısal ekleme indeksi ile erişmenin hala basit bir yolu yoktur.
Öğeleri seçme ve "biçimlendirme" sorusuyla ilgili olarak, sözlükte geri almak istediğiniz anahtarı biliyorsanız, normalde anahtarı almak için bir alt simge olarak kullanırsınız ( my_var = mydict['Apple']
).
Öğeleri gerçekten giriş numarasına göre indeksleyebilmek istiyorsanız (belirli bir girişin numarasının eklemeler yapıldıkça değişeceği gerçeğini göz ardı ederek), o zaman uygun yapı muhtemelen iki öğeli demetlerden oluşan bir liste olacaktır. Onun yerine
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
şunları kullanabilirsiniz:
mylist = [
('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}),
('Grapes', {'Arabian': '25', 'Indian': '20'}
]
Bu rejim altında, ilk giriş mylist[0]
klasik liste sonu formundadır ve değeri şeklindedir ('Apple', {'American':'16', 'Mexican':10, 'Chinese':5})
. Tüm listeyi aşağıdaki gibi yineleyebilirsiniz:
for (key, value) in mylist: # unpacks to avoid tuple indexing
if key == 'Apple':
if 'American' in value:
print(value['American'])
ama "Elma" anahtarını aradığınızı biliyorsanız, neden bunun yerine bir dikt kullanmayasınız?
Anahtarların listesini önbelleğe alarak ek bir yönlendirme düzeyi sunabilirsiniz, ancak iki veri yapısını eşzamanlı tutmanın karmaşıklığı kaçınılmaz olarak kodunuzun karmaşıklığını artıracaktır.