Dict Tipindeki Değişkene Veri Ekleme Problemi
-
Merhaba arkadaşlar,
python ile yazdığım bir sınıfta gelen dict verileri parse edip tek tek başka bir dict değişkene ekliyorum. Aldığım verileri increment olan bir int değişkenin değerini key olarak ve verilerimi de value olarak ekliyorum.
Return edilen self.medias ın olması gereken yapı şöyle=> { 0: { a verisi }, 1: { b verisi }, 2: { c verisi }, }
Dönen sonuç ise böyle=> { 0: { c verisi }, 1: { c verisi }, 2: { c verisi }, }
Velhasılı kelam kodları aşağıda paylaşayım.
kodlara buradan da ulaşabilirsiniz => https://codepaste.net/pxj734
def setMediasByUsername(self, username, count=10, maxId=""): index = 0 # gelen json veriden işleme tabi tutulan veri sayısı. Count kadar veri çekebilmek için. moreAvailable = True # Çekilecek veri oldukça True döner. maxId = maxId while index < count and moreAvailable: url = ep.getUrlAccountJsonMedias(username=username, maxId=maxId) # url e get ile requests attık. r = requests.get(url=url) # Eğer 404 hata kodu dönerse hata mesajını atayıp False döndürüyoruz. if r.status_code == 404: ex.setErrorMessage(errorCode="404", errorNote="Girilen username ile kullanıcı bulamadık.") return False # Eğer 200 dışında bir kod dönmüşse hata mesajı oluşturulup False return edilir. elif r.status_code != 200: ex.setErrorMessage(errorCode=r.status_code, errorNote="Username ile yapılan medya paylaşımları çekilirken bir hata oluştu.") return False elif type(r.json()) != dict: ex.setErrorMessage(errorCode=type(r.json()), errorNote="Username ile yapılan paylaşımlar çekilirken istenmeyen veri tipi döndü.") return False # Dönen sonucu json olarak alıp datas değişkenine atadık. datas = r.json() # daha çekilecek veri varsa onu da aldık. moreAvailable = datas["more_available"] # Çekilen son verinin id si maxId olarak atandı. maxId = datas["items"][len(datas["items"]) - 1]["id"] # Gelen her veriyi tek tek parse edip ekliyoruz. for i in datas["items"]:
self.medias[index] = mp.getMediaParse(data=i) # print("index = {}, \ndata = {}\nmedias = {}".format(index, s, self.medias)) index += 1 # Eğer istenen veri kadarını aldıysak for içinden çıkarız. if index >= count: break return self.medias -
mp.getMediaParse(data=datas["items"][i]) ile gelen veri her defasında farklı oluyor yani dönen veride sorun yok.
index te normal şekilde her defasında artıp geliyor. Fakat medias a ekleyince nasıl oluyorsa tüm veriler aynı oluyor.
İşlemin aynısını kendi yazdığım birkaç satırlık datalarla simüle ediyorum öyle bir sorun yok. -
Bir defaya mahsus up olsun.
-
Konuyu bir arkadaşın yardımıyla çözdük. dict içinde dict tanımlarken aynı instance üzerinde işlem yapıldığı için sorun oluşuyormuş aşağıdaki kodu değiştirerek sorun çözüldü.
Eski hali
self.medias[index] = mp.getMediaParse(data=i)Yeni hali
self.medias[index] = dict(mp.getMediaParse(data=i))