Проблема оптимизации, если условия в цикле for - PullRequest
0 голосов
/ 26 июня 2019

У меня небольшая проблема с различными условиями if в цикле for. Я уверен, что есть способ оптимизировать этот код, но я не могу понять, как ... Большое спасибо за вашу помощь!

list1 = list()
list2 = list()
for item1, item2 in zip(data1, data2):
    if 'link' in item1 and 'link' in item2:
        list1.append(item1['link'])
        list2.append(item2['link'])
    elif 'link' in item1['details'] and 'link' in item2['details']:
        list1.append(item1['details']['link'])
        list2.append(item2['details']['link'])
    elif 'title' in item1 and 'title' in item2:
        list1.append(item1['title'])
        list2.append(item2['title'])
    elif 'description' in item1 and 'description' in item2:
        list1.append(item1['description'])
        list2.append(item2['description'])
    elif 'title' in item1['nav']['side'] and 'title' in item2['nav']['side']:
        list1.append(item1['nav']['side']['title'])
        list2.append(item2['nav']['side']['title'])
    elif 'title' in item1['nav']['top'] and 'title' in item2['nav']['top']:
        list1.append(item1['nav']['top']['title'])
        list2.append(item2['nav']['top']['title'])

1 Ответ

0 голосов
/ 26 июня 2019

Ваша проблема не очень ясна, потому что вы не предоставляете нам входные данные.Вы можете сделать что-то подобное, используя python get.python get return None, если элемент не присутствует в dict.python или короткое замыкание, поэтому первым элементом, который не является None, является return.это решило бы вашу проблему.

list1 = list()
list2 = list()
for item1, item2 in zip(data1, data2):
    if 'link' in item1 and 'link' in item2:
        item1_to_append = item1.get('link') 
                        or item1.get('details', {}).get('link') 
                        or item1.get('title', {}) 
                        or item1.get('description', {}) 
                        or item1.get('nav', {}).get('side', {}).get('title') 
                        or item1.get('nav', {}).get('top', {}).get('title')
        item2_to_append = item2.get('link') 
                        or item2.get('details', {}).get('link') 
                        or item2.get('title', {}) 
                        or item2.get('description', {}) 
                        or item2.get('nav', {}).get('side', {}).get('title') 
                        or item2.get('nav', {}).get('top', {}).get('title')
        if item1_to_append:
            list1.append(item_to_append)
        if item2_to_append: 
            list2.append(item2_to_append)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...