Merhabalar;
Epeyce kategori içeren bir json verisi var. 11 tane ana kategoriden oluşuyor ve ağaç şeklinde kategori altında kategori/kategoriler var. Yalnız bazı kategorilerin alt kategorileri yok. Alt kategorisi olmayan kategorilerin seçilmesi gerek. 3. parti bir modül ile ayıklayabildim ama daha kısa veya sağlıklı bir yöntem varmıdır; merak ediyorum.
Bilerek yazdığım kodları paylaşamıyorum. Çünkü algoritmayı düşünürken sürekli yazdığım kodlar aklınıza gelebilir. Bu da farklı düşünmenizi (bence) engeller.
def find_empty_subs(categ):
# olası alt kategori listesini seçeriz
sub_categs = categ["subCategories"]
# alt kategori yoksa burada belli olur, yazdırabiliriz
if not sub_categs:
print(categ["name"])
return
# Her bir alt kategoriyi recursive olarak geziyoruz
for cat in sub_categs:
find_empty_subs(cat)
# Bütün ana kategorileri dolaşıyoruz
for main_categ in json_data["categories"]:
find_empty_subs(main_categ)
Gerçekten harika! Kodlarınızı incelediğimde basit düşünmem gerektiğini anladım
import ijson
def parser():
with open("data.json", mode="r", encoding="utf-8") as json:
parser = ijson.parse(json)
prefixes = []
for prefix, event, value in parser:
if prefix.endswith(".subCategories") and not value:
if prefix not in prefixes:
prefixes.append(prefix)
nullCategories = []
for rank in range(len(prefixes)):
json.seek(0)
for nullCategory in ijson.items(json, prefixes[rank]):
nullCategories.append(nullCategory)
lists = [category for category in nullCategories if category]
return sorted([x[0]["name"] for x in lists])
if __name__ == "__main__":
for x in parser():
print(x)