Как проверить, что все элементы списка находятся внутри списка строк - PullRequest
0 голосов
/ 07 июня 2019

Я занимаюсь разбором сайта, чтобы поймать доступные продукты и их размеры. Theres 3 продукта загружены. Theres список с именем 'find_id_1', который содержит 3 элемента, каждый элемент имеет название продукта и их варианты идентификаторов. Я сделал еще 2 списка с именами ключевых слов и с отрицательными. список ключевых слов содержит ключевые слова, которые должен иметь название желаемого продукта. Если в названии продукта есть какие-либо элементы из отрицательного списка, то этот продукт мне не нужен.

found_product = []
keywords = ['YEEZY','BOOST','700']
negative = ['INFANTS','KIDS']

find_id_1 = ['{"id":2069103968384,"title":
"\nYEEZY BOOST 700 V2","handle":**"yeezy-boost-700-v2-vanta-june-6"**,
[{"id":19434310238336,"parent_id":2069103968384,"available":true,
"sku":"193093889925","featured_image":null,"public_title":null,
"requires_shipping":true,"price":30000,"options"', 

'{"id":2069103935616,"title":"\nYEEZY BOOST 700 V2 KIDS","handle":
"yeezy-boost-700-v2-vanta-kids-june-6",`
["10.5k"],"option1":"10.5k","option2":"",
`"option3":"","option4":""},{"id":19434309845120,"parent_id":2069103935616,
"available":false,"sku":"193093893625","featured_image":null,
"public_title":null,"requires_shipping":true,"price":18000,"options"',

'{"id":2069104001152,"title":"\nYEEZY BOOST 700 V2 INFANTS",
"handle":**"yeezy-boost-700-v2-vanta-infants-june-6"***,`
["4K"],"option1":"4k","option2":"",`
"option3":"","option4":""},{"id":161803398876,"parent_id":2069104001152,
"available":false,"sku":"193093893724",
"featured_image":null,"public_title":null,
"requires_shipping":true,"price":15000,"options"']

Я попытался использовать цикл for, чтобы перебрать каждый элемент в find_info_1, а затем создать другой цикл for, который перебирает каждый элемент в ключевом слове и минус, но я получаю неправильный продукт. Вот мой код:

for product in find_id_1:
     for key in keywords:
         for neg in negative:
             if key in product:
                 if neg not in product:
                     found_product = product

Он печатает следующее:

'{"id":2069104001152,"title":"\nYEEZY BOOST 700 V2 INFANTS",
"handle":"yeezy-boost-700-v2-vanta-infants-june-6,`
["4K"],"option1":"4k","option2":"",`
"option3":"","option4":""},
{"id":161803398876,"parent_id":2069104001152,
"available":false,"sku":"193093893724",
"featured_image":null,"public_title":null,
"requires_shipping":true,"price":15000,"options"']

Я пытаюсь заставить его вернуть элемент 0 из find_info_1, потому что это единственный, в котором нет элементов из списка отрицательных. Будет ли использование цикла for лучшим и быстрым способом перебора моего списка? Спасибо! Любая помощь приветствуется!

1 Ответ

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

Прежде всего, вы не должны обрабатывать данные json как строку. Просто проанализируйте json с помощью библиотеки json, чтобы вы могли проверить только название продукта. По мере того, как список продуктов и спецификации каждого продукта увеличиваются, время, необходимое для итерации, увеличивается.

Чтобы ответить на ваш вопрос, вы можете просто сделать

for product in find_id_1:
    if any(key in product for key in keywords):
        if not any(neg in product for neg in negative):
            found_product.append(product)

это даст вам элемент согласно вашей спецификации. однако я внес некоторые изменения в ваши данные, просто чтобы сделать их действительным кодом Python ..

found_product = []
keywords = ['YEEZY','BOOST','700']
negative = ['INFANTS','KIDS']

find_id_1 = [""""'{"id":2069103968384,"title":
"\nYEEZY BOOST 700 V2","handle":**"yeezy-boost-700-v2-vanta-june-6"**,
[{"id":19434310238336,"parent_id":2069103968384,"available":true,
"sku":"193093889925","featured_image":null,"public_title":null,
"requires_shipping":true,"price":30000,"options"'""",

""""'{"id":2069103935616,"title":"\nYEEZY BOOST 700 V2 KIDS","handle":
"yeezy-boost-700-v2-vanta-kids-june-6",`
["10.5k"],"option1":"10.5k","option2":"",
`"option3":"","option4":""},{"id":19434309845120,"parent_id":2069103935616,
"available":false,"sku":"193093893625","featured_image":null,
"public_title":null,"requires_shipping":true,"price":18000,"options"'""",

""""'{"id":2069104001152,"title":"\nYEEZY BOOST 700 V2 INFANTS",
"handle":**"yeezy-boost-700-v2-vanta-infants-june-6"***,`
["4K"],"option1":"4k","option2":"",`
"option3":"","option4":""},{"id":161803398876,"parent_id":2069104001152,
"available":false,"sku":"193093893724",
"featured_image":null,"public_title":null,
"requires_shipping":true,"price":15000,"options"'"""]



for product in find_id_1:
    if any(key in product for key in keywords):
        if not any(neg in product for neg in negative):
            found_product.append(product)


print(found_product)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...