Форум сайта python.su
0
Всем добрый вечер. Подскажите, пожалуйста, по такому вопросу.
Есть два цикла. Первый цикл:
import json tickets = json.loads(response_body) for airport, flights in tickets['data'].items(): print('airport:', airport)
{"success":true,"data":{"AAE":{"2":{"price":48973,"airline":"AF","flight_number":1745,"departure_at":"2018-09-04T18:45:00Z","return_at":"2018-09-14T07:15:00Z","expires_at":"2018-09-02T06:57:21Z"}
citys = json.loads(responce) for h in citys: print(h['code']) print(h['name'])
[{"code":"AAЕ","name":"Анаа","coordinates":{"lon":-145.41667,"lat":-17.05},"cases":{"ro":"","da":"","vi":"","tv":"","pr":""},"time_zone":"Pacific/Tahiti","name_translations":{"en":"Anaa"},"country_code":"PF"}
Отредактировано silenoz (Сен. 14, 2018 18:09:26)
Офлайн
857
Преобразуй первый json в список кодов.
Преобразуй второй json в словарь пар (код, город).
После этого перебирай элементы из списка кодов и бери их в словаре код-город через .get() .
>>> d = {'a': 1, 'b': 2} >>> d.get('a') 1 >>> d.get('c') >>>
Отредактировано py.user.next (Сен. 15, 2018 01:47:45)
Офлайн
0
добрый день. я задам нубский вопрос по поводу вот этого комментария:
py.user.nextв приведенном мной первом цикле, где я из json выбираю коды, разве на выходе будет не список?
Преобразуй первый json в список кодов.
for h in citys: codename = [h['code'], h['name']] result = dict([codename])
{'AAA': 'Анаа'}
for n in lst: for j in result: if n == result[j]: print(result.get(j))
Отредактировано silenoz (Сен. 17, 2018 11:21:58)
Офлайн
1
json1 = {"success": True, "data": {"AAE": { "2": {"price": 48973, "airline": "AF", "flight_number": 1745, "departure_at": "2018-09-04T18:45:00Z", "return_at": "2018-09-14T07:15:00Z", "expires_at": "2018-09-02T06:57:21Z"}}}} json2 = [{"code": "AAE", "name": "Анаа", "coordinates": {"lon": -145.41667, "lat": -17.05}, "cases": {"ro": "", "da": "", "vi": "", "tv": "", "pr": ""}, "time_zone": "Pacific/Tahiti", "name_translations": {"en": "Anaa"}, "country_code": "PF"}] cities = {x["code"]: x["name"] for x in json2} for code, data in json1["data"].items(): print ("Code={} Name={}".format(code, cities.get(code)))
Офлайн
0
спасибо большое за помощь
Офлайн
857
silenozНадо отделить json от нужных данных. Отделяешь нужные данные и работаешь с ними так, будто не из json-формата они были взяты, а напрямую откуда-то. Не надо напрямую с json-данными работать. Потом json заменят на другой формат (xml или yaml или ещё что), у тебя из-за этого весь скрипт сломается. Надо отделить формат, чтобы чтение данных можно было потом спрятать в функции. При смене формата меняется потом функция чтения данных только, а вся программа остаётся неизменной. Когда таких мест в программе много, это сразу становится заметным. Ты не можешь менять программу, если она привязана к конкретным форматам. Поэтому все такие места изолируются, а данные переводятся в общий формат, который не зависит от источника/назначения данных.
в приведенном мной первом цикле, где я из json выбираю коды, разве на выходе будет не список?
>>> import json >>> >>> json1text = """ ... { ... "success": true, ... "data": { ... "AAE": { ... "2": { ... "price": 48973, ... "airline": "AF", ... "flight_number": 1745, ... "departure_at": "2018-09-04T18:45:00Z", ... "return_at": "2018-09-14T07:15:00Z", ... "expires_at": "2018-09-02T06:57:21Z" ... } ... } ... } ... } ... """ >>> >>> json2text = """ ... [ ... { ... "code": "AAЕ", ... "name": "Анаа", ... "coordinates": { ... "lon": -145.41667, ... "lat": -17.05 ... }, ... "cases": { ... "ro": "", ... "da": "", ... "vi": "", ... "tv": "", ... "pr": "" ... }, ... "time_zone": "Pacific/Tahiti", ... "name_translations": { ... "en": "Anaa" ... }, ... "country_code": "PF" ... } ... ] ... """ >>> >>> json1 = json.loads(json1text) >>> json2 = json.loads(json2text) >>> >>> lst = list(json1['data']) >>> dct = {i['code']: i['name'] for i in json2} >>> >>> lst ['AAE'] >>> dct {'AAЕ': 'Анаа'} >>>
Отредактировано py.user.next (Сен. 17, 2018 13:45:13)
Офлайн