首页 文章

如何检查列表a是否大于列表b然后替换它

提问于
浏览
-4

所以我想创建一个比较列表,其中我有一个列表A(Old_list),其中包含:

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

以及包含的列表B(产品)

{'name': 'Apple and Juice', 'sizeslist': None}

所以我在开始时做的是检查sizelist的长度是否高于列表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() 并且我的问题是如何改进代码以便我不会得到没有len()的错误,并且还能够只更改sizeslist而不是整个列表 .

编辑:

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 回答

  • 1

    我假设您要比较 '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']}
    
  • 0
    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更改为某个值 .

相关问题