Takım Bilgilerini Saklamak

Basit düşün.

import random

hayvanlar= {
    'Kara':{
        'Tavşan': 1,
        'Kedi': 2
    },
    'Hava':{
        'Martı': 5,
        'Arı': 7
    },
    'Su':{
        'Hamsi': 10,
        'Palamut': 4,
    }
}
for i in range(2):
  habitat = random.choice([i for i in   hayvanlar])
  animal = random.choice([i for i in hayvanlar[habitat] ])

  print(f"{animal} { hayvanlar[habitat][animal] } tane bulunmaktadır")

Tabii her habitattan sadece bir canlının seçilmesini istiyorsanız bu durumda bu kodlar istediğiniz çıktıyı vermeyebilir (sizin yönteminiz çalışır) ancak sadece iki tane hayvanın bastırılmasını istiyorsanız basitçe bir döngü kurabilirsiniz.


1 Beğeni
for i in range(2):
  habitat = random.choice([i for i in   hayvanlar])
  animal = random.choice([i for i in hayvanlar[habitat] ])
  print(f"{animal} { hayvanlar[habitat][animal] } tane bulunmaktadır")
  hayvanlar.pop(habitat)

Hocam bu şekilde tamam mıdır? Ortak noktaya vardık sanırım sonunda :smiley:

Hatta şöyle daha güzel olabilir belki

new_hayvanlar = hayvanlar.copy()
for i in range(2):
  habitat = random.choice([i for i in  new_hayvanlar])
  animal = random.choice([i for i in new_hayvanlar[habitat] ])
  print(f"{animal} { hayvanlar[habitat][animal] } tane bulunmaktadır")
  new_hayvanlar.pop(habitat)

Hocam ben bu konuyu unutturmamaya niyetlendim :slight_smile:
Bu sözlük yapısını liste şeklinde nasıl yapabiliriz. Ve içerisindeki bilgileri nasıl çekeriz?
Benim yaşadığım sorun şu ki;
Bunun listesini yapmak.
Bir de index numarası ile çekmek zorunda mıyız? Sözlükteki gibi olmuyor mu?

Liste elemanlarına sözlüklerdeki gibi bracket notation ile mi erişmek istiyorsunuz ? Böyle bir şey imkansız ve mantıksız da zaten :smiley:
Sözlüklerin içerisinde bildiğiniz gibi key’ler oluyor. Key’lerin value’larına erişmek için de bracket notation kullanıyoruz: dictionary["Key"]
Fark ettiğiniz üzere de key’lere erişmek için bize lazım olan key’in ismini kullanıyoruz ve bu bir string.
Şimdi aynısını listelerde düşünmeye çalışın.

array = [0, 1, 2, 3, 4, 5, "str"]

array[]

Ne gelecek parantezlerin arasına ? Mesela 4’e erişeceksiniz ve bracket notation kullanacaksınız sözlüklerdeki gibi. Sizce de mantıksız değil mi ?
Sözlükler ögelerine bracket notation ile erişildiği için değerli, listeler de ögelerine index numarası ile erişildiği için değerli. İkisini birbirine karıştırmanın bir anlamı yok. Duruma göre biri daha avantajlı olur ve onu tercih edersiniz.


Yapmayın :smiley:
Bu yazdıklarınız da yukarıda yazdıklarımla alakalı zaten:


Her şeye rağmen yine de bu sözlüğün liste olmasını istiyorsanız bu şöyle görünebilir:

hayvanlar= [
    {
      'Kara': {
          'Tavşan': 1,
          'Kedi': 2
      }
    },
    
    {
      'Hava': {
          'Martı': 5,
          'Arı': 7
      }
    },
    
    {
      'Su': {
          'Hamsi': 10,
          'Palamut': 4,
      }
    }
]

Ama böyle bir şey için direkt sözlük kullanmak daha iyi bir tercih olacaktır.
Çok spesifik durumlarda belki böyle bir şeye ihtiyacınız olabilir ancak zannetmiyorum.

1 Beğeni
# Sozluk
sozluk={
#   'Osmanlıca  : 'Türkçe'
    'Müteşekkir':   'Teşekkür etmek',
    'Mukaddes'  :   'Kutsal',
    'Mukadderat':   'Kader',
    'Âbgir'     :   'Su birikintisi',
    'Müteesir'  :   'Üzülmüş',
    'Aksülamel' :   'Tepki',
    'Mefhum'    :   'Kavram',
    'Mazi'      :   'Geçmiş',
    'Akıbet'    :   'Sonuç',
    'Şîrâze'    :   'Nizam',
    'Senâ'      :   'Övme',
    'Kara'      :   'Kara',
    'karam'     :   'Siyah'
}
    istek = input("Anlamını istediğiniz kelime: ").title().strip().strip()
    print("\nTurkçe => Osmanlıca")
    for x in sozluk.keys():
        while True:
            tr_osm = istek in sozluk[x]
            if tr_osm == True:
                n = sozluk[x]
                print(f"{n} = {x}")
                break
            else:
                break
    print("\nOsmanlıca => Türkçe")

Sondaki anlamlar deneme amaçlı uydurmadır gerçekliği yoktur.

Şunun tam tersini nasıl yaparım?
Burada olan durum şu;

girdi: Ka ise ‘Ka’ ile başlayan kelimeleri önüne seriyor.
Ancak bunu Türkçe (Value) kısmında yapabildim. Osmanlıca (Key) kısmında beceremedim.

1 Beğeni
    3:{
        'marka':'Renault',
        'model':'Symbol',
        'üretim':2015,
        'renk':'Beyaz',}
    def oto_goster(self):
        for i in otomobillerr:
            n = otomobillerr[i]['marka']
            if self.ksecim == n:
                print("""
Marka :{}
Model :{}
Üretim:{}
Renk  :{}
Fiyat :{}\n""".format(otomobillerr[i]['marka'],otomobillerr[i]['model'],otomobillerr[i]['üretim'],otomobillerr[i]['renk'],otomobillerr[i]['fiyat']))
                continue

Üsteki sözlükte fiyat değeri eksik mesela (Bilinçli veya bilinçsiz) Bu çıktıyı nasıl hata kodu vermeden yazdırabiliriz?