Pobieranie wartości X z obiektu, jeżeli zawiera tytuł Y

0

Dzień dobry, cześć!

Otóż posiadam kilka takich tablic w JSONie https://pastebin.com/10gkr8tK. Jak widać value powtarza się w niemalże w każdym obiekcie tej tablicy. Potrzebuje pobrać jedynie value tam gdzie title jest Price. Odpada sposób pobierania wartości po indeksie, ponieważ jak mówiłem wcześniej mam kilkadziesiąt takich tablic i nie każda może zawierać price. W pseudokodzie wygląda to tak: jeżeli obiekt zawiera title : Price - > weź value. Nie mam pojęcia jak to zrobić w Pythonie.
W JS zrobiłem to tak: https://pastebin.com/PnssaAwb

Proszę o pomoc i pozdrawiam serdecznie ;)

0

Jeżeli Importujesz ten JSON do Pythona, to MAsz go tam jako co?

1

Można na przykład tak:

from json import load


with open('d.json') as df:
    data = load(df)

[el.get('value') for el in data.get('fields') if el.get('title') == "Price"]

0
lion137 napisał(a):

Jeżeli Importujesz ten JSON do Pythona, to MAsz go tam jako co?

https://pastebin.com/QgG1sD18 tu jest mój cały JSON, w Pythonie jako list zawierający dict

0
Crude Monte Carlo napisał(a):

Można na przykład tak:

from json import load


with open('d.json') as df:
    data = load(df)

[el.get('value') for el in data.get('fields') if el.get('title') == "Price"]

O! Super, bardzo dziekuje :) sprawdze to mam nadzieje, że sie przyda!

0
pablo1609 napisał(a):
Crude Monte Carlo napisał(a):

Można na przykład tak:

from json import load


with open('d.json') as df:
    data = load(df)

[el.get('value') for el in data.get('fields') if el.get('title') == "Price"]

O! Super, bardzo dziekuje :) sprawdze to mam nadzieje, że sie przyda!

AttributeError: 'list' object has no attribute 'get' próbowałem modyfikować i klapa. Szczerze budowa tego JSONa jest dla mnie pogmatwana i temu nie umiem się po nim poruszać i pobierać to co chcę. W Pythonie jestem początkujący temu tak..

1
pablo1609 napisał(a):

w Pythonie jako list zawierający dict

[item['value'] for item in fields if item['title'] == "Price"]
1

Możesz zrobić to w poniższy sposób:

from json import load


with open('d2.json') as df:
    data = load(df)

attachments = [el.get('attachments') for el in data]  # zakladam ze fields znajduje sie tylko wewnatrz attachments
fileds = [at[0].get('fields') for at in attachments]  # zakladam, ze lista jest jednoelementowa, jezeli nie pomija to co jest dalej
flat_fileds = [field for field_list in fileds for field in field_list]
[el.get('value') for el in flat_fileds if el.get('title') == "Price"]

Przy czym to rozwiązanie jest bardzo nieelastyczne. Sensowne rozwiązanie jest trochę bardziej absorbujące i nie będę go pisał od zera, ale chętnie podpowiem.

1

wykorzystując moduł itertools, funkcje filter, map można to zapisać tak

import itertools as it
import json

with open('d.json') as f:
    a = json.load(f)
b = it.chain(*map(lambda x: x["attachments"][0]["fields"], a))
c = filter(lambda x: x["title"] == "Price", b)
d = map(lambda x: x["value"], c)
print d
0

Rozwiązania się przydały! Bardzo dziękuję :) teraz natomiast mam problem z iteracją float. Chciałbym to co mi wyszło zsumować, W sensie string na float, zrobiłem, lecz nie mogę tego dodać. Jakieś podpowiedzi?

0

W moim przykładzie jeżeli ostatnią tablice przypiszesz do zmiennej values

sum([float(v) for v in values])

W przykładzie @reptile333

sum([float(v) for v in list(d)])
1

Problem jest zgoła inny. Nie znasz absolutnych podstaw Pythona. Przerób jakiś kurs itd. na pewno ci to ułatwi dalszą pracę

0

Coś w tym jest, troszkę się w nim nie odnajduje przyznaje. Coś godnego polecenia?

Tutorial z dokumentacji Pythona jest według mnie całkiem niezły na początek.

https://docs.python.org/3/tutorial/index.html

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.