Wpis z mikrobloga

utworzylem liste: self.objects = ['dyrektor', 'nauczyciel', 'uczen']

i teraz tworzac obiekt chcialbym miec:
data = obj['dyrektor'] ['nauczyciel'] ['uczen']

potrzebuje tego do czytania z jsona.
nie wiem jak to teraz zapisac zeby z
['dyrektor', 'nauczyciel', 'uczen']
uzyskac
['dyrektor'] ['nauczyciel'] ['uczen'] ?

moga byc tez sytuacje ze
self.
objects = ['dyrektor', 'nauczyciel']
albo
self._objects = ['dyrektor', 'nauczyciel', 'uczen', 'wozny']

#naukaprogramowania #python
  • 14
  • Odpowiedz
probuje tez przekazac listy w liscie

self.objects = [['dyrektor'], ['nauczyciel'], ['uczen']]

ale nie wiem jak to pozniej przeksztalcic na

data = obj['dyrektor'] ['nauczyciel'] ['uczen']
wpisanie
data = obj[self.
objects]
nie przechodzi bo jest lista list
  • Odpowiedz
@rosso_corsa: Możesz doprecyzować, czy szukasz wywołania pojedynczo elementów wewnątrz, czy też [ [], [], [] ]? Zakładam, że chodzi o ten drugi:

objects = ['dyrektor', 'nauczyciel', 'uczen']
data = []
data = [[x] for x in objects]
print(data)

O to chodziło?
  • Odpowiedz
@rosso_corsa: okej, to w takim razie rozwiązanie:

data = obj
for title in self._objects:
....data = data[title]

#edit: trudno sie formatuje na wykopie kod hehe

Zadziała. Ale to bardzo zła konstrukcja. Jeśli musisz korzystać z takiego potworka, to inaczej zaplanuj klasę.
  • Odpowiedz
@#!$%@?: potrzebuje wywolac jeden element z listy osadzonej w liscie znajdujacej sie w x listach

i teraz mam 'adres' tego elementu zapisalem go sobie w postaci:

zmienna = [['dyrektor'], ['nauczyciel'], ['uczen']]

natomiast odwolanie aby go dostac ma wygladac tak:

odwolanie = tablica['dyrektor'] ['nauczyciel'] ['uczen']

po prostu nie wiedzialem jak ['dyrektor'] ['nauczyciel'] ['uczen'] przekazac w jednej zmiennej wiec wsadzilem to w jedna liste. no i teraz nie wiem jak to przeksztalcic jedno w
  • Odpowiedz
@fidd27: @#!$%@?:

w sumie doszedlem ze mozna to przekazac w ten sposob

zmienna = ['dyrektor', 'nauczyciel', 'uczen']

a pozniej

odwolanie = tablica[zmienna [0]] [zmienna [1]] [zmienna [2]]

ale teraz nie wiem jak zrobic inkrementacje w odwolaniu jakby elementow tablicy bylo mniej albo wiecej
  • Odpowiedz
ref = obj

for title in self._objects:

....ref = ref[title]


@fidd27: dziala tylko mysle jak ( ͡° ͜ʖ ͡°) poczekaj, debugujac to po prostu zmniejsza coraz bardziej rozmiar listy wchodzac w jej kolejne podlisty tak?
  • Odpowiedz
@rosso_corsa: Rozważ zapis do słownika zamiast do tablicy. Wyszukiwanie elementów będzie wtedy wydajniejsze. Jeśli pracujesz na JSONie to słownik będzie lepszym wyborem. Wklejam kod (pomijam walidację) z kilkoma przykładami. Wyciąganie zmiennych poprzez wpisywanie numeracji indeksu na sztywno nie jest dobrym pomysłem.

Wykop nie czyta tabulacji, dlatego zaznaczam ją w kodzie poprzez #----#. Usuń je u siebie w staw pojedynczy tab.

import functools
from functools import reduce
import operator
szukanauczen =
  • Odpowiedz
@#!$%@?: myslalem o zapisie do slownika ale chyba jednak zostane przy liscie tylko bede musial ja przerobic odpuszczajac indeksy i wolajac po wartosci klucza.

splaszczanie jsona to chyba nie najlepszy pomysl. nie wiem jak sie pozniej odwolac do klucza ktory z "Andrzej" zmieni sie na "Dyrektor.Andrzej" no chyba ze bym stringi dodawal. Myslalem bardziej zeby zrobic to tak:

json:
{
"pracownicy":
{
"Dyrektor":"Andrzej",
"Nauczyciel":"0lek",
"Uczeniowie":
{1:"wojtek",
2:"michal"
}
},
"wozny":
{"1:"czesiek"
}
  • Odpowiedz
@rosso_corsa: Zakładam, że w takim razie listy mogą być wielokrotnie zagnieżdżone i nie znasz kolejności elementów, ale słowo klucz jest na początku. W takim wypadku możesz zrobić proste dopasowanie indeksów i dalej wołać zmienne po tych indeksach.

# więcej w dokumentacji --> https://docs.python.org/3/tutorial/datastructures.html
# założenie, że kluczowe słowo stoi na pierwszym miejscu w [], inaczej musisz robić walidację

teachers = [['uczen',['nazwisko', 'stopnie']],['dyrektor',['pensja']],['nauczyciel']]

# zastąb znak pojedynczym tabulatorem <-> oraz znak <-->
  • Odpowiedz