Найти - Пользователи
Полная версия: Сравнение значений из двух циклов
Начало » Python для новичков » Сравнение значений из двух циклов
1
silenoz
Всем добрый вечер. Подскажите, пожалуйста, по такому вопросу.
Есть два цикла. Первый цикл:
 import json
 tickets = json.loads(response_body)
 for airport, flights in tickets['data'].items():
     print('airport:', airport)
который парсит json вида
 {"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"}
и вытягивает из него код аэропорта - AAE
второй же цикл
 citys = json.loads(responce)
 for h in citys:
    print(h['code'])
    print(h['name'])
парсит другой json вида
 [{"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"}
и вытягивает из него код города (ААЕ) и имя города (Анаа)

Я хочу сравнить код аэропорта из первого цикла с кодом аэропорта из второго цикла и в случае их совпадения выводить название города, которое я получаю во втором цикле.
Как мне это сделать подскажите, пожалуйста?
py.user.next
Преобразуй первый json в список кодов.
Преобразуй второй json в словарь пар (код, город).
После этого перебирай элементы из списка кодов и бери их в словаре код-город через .get() .

  
>>> d = {'a': 1, 'b': 2}
>>> d.get('a')
1
>>> d.get('c')
>>>
silenoz
добрый день. я задам нубский вопрос по поводу вот этого комментария:
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))
пробую вытащить значение имени при нахождении совпадения кодов. но что-то не выходит
Papa_Svin
 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)))
silenoz
спасибо большое за помощь
py.user.next
silenoz
в приведенном мной первом цикле, где я из json выбираю коды, разве на выходе будет не список?
Надо отделить json от нужных данных. Отделяешь нужные данные и работаешь с ними так, будто не из json-формата они были взяты, а напрямую откуда-то. Не надо напрямую с json-данными работать. Потом json заменят на другой формат (xml или yaml или ещё что), у тебя из-за этого весь скрипт сломается. Надо отделить формат, чтобы чтение данных можно было потом спрятать в функции. При смене формата меняется потом функция чтения данных только, а вся программа остаётся неизменной. Когда таких мест в программе много, это сразу становится заметным. Ты не можешь менять программу, если она привязана к конкретным форматам. Поэтому все такие места изолируются, а данные переводятся в общий формат, который не зависит от источника/назначения данных.

  
>>> 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Е': 'Анаа'}
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB