Как проверить, больше ли список a, чем список b, а затем заменить его - PullRequest
0 голосов
/ 08 декабря 2018

Итак, я подумывал создать список сравнения, в котором у меня есть список A (Old_list), который содержит:

{'name': 'Jesus and Mary', 'sizeslist': ['Low', 'Medium', 'High']}

и список B (продукт), который содержит

{'name': 'Apple and Juice', 'sizeslist': None}
* 1006.* Итак, в начале я проверил, была ли длина списка размеров больше, чем в списке B, и он должен заменить его.
old_list = [{'name': 'Jesus and Mary', 'sizeslist': ['Low', 'Medium', 'High']}]

while True:
    product = [{'name': 'Apple and Juice', 'sizeslist': None}]

    if product not in old_list:

        a = product['sizeslist']

        if old_list != []:
            old_list_value = old_list[0]['sizeslist']

            if len(old_list_value) < len(a):
                print("Higher than old_list!")
                old_list[0] = product
                break

            elif len(old_list_value) > len(a):
                old_list[0] = product
                break
        else:
            old_list.append(product)

проблема в том, что я получаю object of type 'NoneType' has no len() иУ меня вопрос, как я могу улучшить код, чтобы я не получил ошибку no len (), а также смог изменить просто список размеров вместо всего списка.

РЕДАКТИРОВАТЬ:

old_list = {'name': 'Jesus and Mary', 'sizes': ['Low', 'Medium', 'High']}

while True:
    new_list = {'name': 'Apple and Juice', 'sizes': None}

    try:
        if new_list['sizes'] not in old_list['sizes']:

                if old_list['sizes'] < new_list['sizes']:
                    print("New element!!!")
                    old_list['sizes'] = new_list['sizes']
                    break

                elif old_list['sizes'] > new_list['sizes']:
                    old_list['sizes'] = new_list['sizes']
                    break

        else:
            randomtime = random.randint(5, 10)
            time.sleep(randomtime)
            continue

    except Exception as err:
        logger.error(err)
        randomtime = random.randint(1, 2)
        time.sleep(randomtime)
        continue

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018
if old_list != []:
            old_list_value1 = old_list['sizeslist']
            old_list_value = list(oldlist_value1[0])

            if len(old_list_value) < len(a):
                print("Higher than old_list!")
                old_list[0] = product
                break

            elif len(old_list_value) > len(a):
                old_list[0] = product
                break

Это может сработать.Также обратите внимание, что вы сравниваете длину строки, где old_list [0] имеет длину 3 символа, а None - ничто.Попробуйте изменить None на какое-то значение.

0 голосов
/ 08 декабря 2018

Я предполагаю, что вы хотите сравнить 'sizeslist', а не весь словарь.Если это так, вы должны принять во внимание случай, когда ваш 'sizeslist' может быть не list, а None.Вот способ справиться с этим.

a = {'name': 'Jesus and Mary', 'sizeslist': ['Low', 'Medium', 'High']}
b = {'name': 'Apple and Juice', 'sizeslist': None}

listA = a['sizeslist']
listB = b['sizeslist']

if not listB or (listA != None and len(listA) > len(listB)):
    b['sizeslist'] = a['sizeslist']
else:
    print("Nope")

print(b) # -> {'name': 'Apple and Juice', 'sizeslist': ['Low', 'Medium', 'High']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...