Bir Sözlük
te yaşları arayacak ve eşleşen ismi gösterecek bir fonksiyon yaptım:
dictionary = {'george' : 16, 'amber' : 19}
search_age = raw_input("Provide age")
for age in dictionary.values():
if age == search_age:
name = dictionary[age]
print name
Yaşı nasıl karşılaştıracağımı ve bulacağımı biliyorum, sadece kişinin adını nasıl göstereceğimi bilmiyorum. Ek olarak, 5. satır nedeniyle bir KeyError
alıyorum. Bunun doğru olmadığını biliyorum ama geriye doğru aramayı nasıl yapacağımı bulamıyorum.
Hiç yok. 'dict' bu şekilde kullanılmak üzere tasarlanmamıştır.
for name, age in dictionary.items(): # for name, age in dictionary.iteritems(): (for Python 2.x)
if age == search_age:
print(name)
Hem adı hem de yaşı istiyorsanız, size anahtar (anahtar, değer)
demetleri veren .items()
kullanmalısınız:
for name, age in mydict.items():
if age == search_age:
print name
Tuple'ı doğrudan `for' döngüsünde iki ayrı değişkene açabilir, ardından yaşı eşleştirebilirsiniz.
Ayrıca, genellikle yaşa göre arama yapacaksanız ve iki kişi aynı yaşta değilse sözlüğü tersine çevirmeyi de düşünmelisiniz:
{16: 'george', 19: 'amber'}
Böylece bir yaş için sadece şöyle yaparak isme bakabilirsiniz
mydict[search_age]
Ben buna list
yerine mydict
diyorum çünkü list
yerleşik bir türün adıdır ve bu adı başka bir şey için kullanmamalısınız.
Belirli bir yaşa sahip tüm kişilerin listesini tek bir satırda bile alabilirsiniz:
[name for name, age in mydict.items() if age == search_age]
veya her yaştan sadece bir kişi varsa:
next((name for name, age in mydict.items() if age == search_age), None)
Eğer o yaşta kimse yoksa size sadece Hiç kimse
verecektir.
Son olarak, eğer dict
uzunsa ve Python 2 kullanıyorsanız, Cat Plus Plus'ın cevabında yaptığı gibi .items()
yerine .iteritems()
kullanmayı düşünmelisiniz, çünkü listenin bir kopyasını oluşturması gerekmez.