Merhabalar, yeni yeni öğreniyorum ve biraz yardıma ihtiyacım olabilir.
Bana verilen bir Indexten liste oluşturmak istiyorum fakat mesela bu Indexin içindeki kelimeler birbirinden ayrılmamış örn. Soyad, Ad (Yıl) Film adı [Aktörün oynadığı karakter]
Mooradian, Joseph (2005) Producers, The [Accountant]
Sullivan, Kelly (VII) (2005) Producers, The [Bavarian Peasant]
Vargo, Matthew J. (2005) Producers, The [Bavarian Peasant]
Ben şimdi bunları nasıl listeleyebilirim dictionary kullanarak?
Veya bunu listelemeden dbm kullanarak isim girildiğinde o isimle ilgili bilgiler göstertebilirmiyim?
Tam olarak nasıl bir çıktı elde etmek istiyorsunuz?
Mesela şöyle bir kod yazsam, istediğiniz gibi bir çıktı mı alıyorsunuz?
def open_text(arg: str):
with open(arg) as f:
return f.readlines()
def split_string(arg: list):
return [i.strip().split(", ") for i in arg]
def add_to_dict(arg: list):
return {
index: {
arg[0][index_]: j
for index_, j in enumerate(i)
}
for index, i in enumerate(arg[1:])
}
data = add_to_dict(split_string(open_text("test.txt")))
print(data[0])
data[0] şöyle bir veri:
{'Soyad': 'Mooradian', 'Ad (Yıl) Film adı': 'Joseph (2005) Producers', '[Aktörün oynadığı karakter]': 'The [Accountant]'}
İsterseniz, sözlüğün anahtarlarını kullanarak bu sözlükteki bilgilere ulaşırsınız. Ama önemli olan sizin nasıl bir sözlük yapısı almak istediğiniz.
Çıktısı şu şekilde olacak; ismi kullanıcı girecek ve o isimle alakalı listeye göre hangi filmde ne zaman oynamış ve o roldeki adını verecek bana
örneğin,
Riegert, Peter (1989) That’s Adequate [Adult Baby Elroy]
Riegert, Peter (1990) Shock to the System, A [Robert Benham]
Riegert, Peter (1978) Animal House [Donald ‘Boon’ Schoenstein]
Ben Riegert Peter girdiğimde bana “Şu filmlerde şu kişi olarak şu tarihlerde oynadı” demesi gerekiyor
O zaman yukarıdaki koda bir de şu fonksiyonu eklerseniz, istediğiniz çıktıyı alırsınız sanırım.
def get_record(surname: str, name: str, d: dict):
return [
list(v.values()) for k, v in d.items()
if (
v["Soyad"] == surname
and
v["Ad (Yıl) Film adı"].split()[0] == name
)
]
Örnek:
data = add_to_dict(split_string(open_text("test.txt")))
print(get_record(surname="Mooradian", name="Joseph", d=data))
Çıktı:
[['Mooradian', 'Joseph (2005) Producers', 'The [Accountant]']]
Ama bu kadar işleme gerek kalmadan, şöyle de yapılabilir sanırım.
def open_text(arg: str):
with open(arg) as f:
return f.readlines()
def get_record(surname, name, d):
return [
i.strip().split(", ") for i in d
if all(j in i for j in [surname, name])
]
data = open_text("test.txt")
print(get_record(surname="Mooradian", name="Joseph", d=data))
Girilen Soyisim, Isım ile ilgili bilgilerin çıkmasını sağlamak istiyorum, yani program input bekleyecek ve o inputa göre listeleyecek bunları…
Ve verdiğiniz Kodda şöyle bir sıkıntı var;
McGill, Bruce (1991) Last Boy Scout, (burada virgül var) The [Michael ‘Mike’ Matthews]
McGill, Bruce (1987) End of the Line [Billy Haney]
McGill, Bruce (1978) Animal House [Daniel Simpson ‘D-Day’ Day]
Şu çıktıyı alıyorum
[[‘McGill’, ‘Bruce (1991) Last Boy Scout’, "The [Michael ‘Mike’ Matthews]"], [‘McGill’, ‘Bruce (1987) End of the Line [Billy Haney]’], [‘McGill’, “Bruce (1978) Animal House [Daniel Simpson ‘D-Day’ Day]”]]