#python
#python
Вопрос:
список A представляет текст, который будет заменен ссылками и метками из списка B
идея состоит в том, чтобы сравнить текст list A
с тегом list B
, теперь ок . Здесь возникает неудобство, условие говорит только о том, есть ли text [0]
в list B
, теперь в качестве замены для этого слова (слова, потому что текст [0]» Часы клиента работают нормально. » есть слово «watch, customer»), поэтому каждое слово представляет другую ссылку
listA = ['Text with label A', 'Label B with text', 'Text without label', 'Only text']
listB = [('urlA', 'label A'), ('urlB', 'label B'), ('urlC', 'label C')]
for uri, label in listB:
print(uri, label)
if any('label A' in label for uri, label in listB):
print("contains somethin&")
else:
print("nothin&")
условное обозначение такое же (теоретически noo?), я не знаю, почему бы что-то не найти
for datail in listA:
print(datail)
if any(datail in label for url, label in listB):
# condition is bad
print("contains somethin&")
# how to replace that word with the ta& and its url
detalle = detalle.replace('', '')
else:
print("nothin&")
Подводя итог, я пытаюсь выполнить семантическую аннотацию, вдруг какая-нибудь библиотека или что-то более эффективное
Комментарии:
1. Можете ли вы предоставить пример вывода, который вы ожидаете увидеть из этого кода. Это поможет уточнить ответы.
Ответ №1:
Неясно, что именно вы пытаетесь сделать, использует ли это регулярные выражения, если фразы могут быть частью списка значений, или вы пытаетесь найти хороший способ перебрать ваши параметры и посмотреть, существует ли слово в наборе поиска.
Для первого варианта ознакомьтесь с библиотекой re, которая помогает создавать регулярные выражения и делать что-то вроде
re.search(my_pattern, strin&_to_check)
Для второго случая я бы порекомендовал словарь, поскольку вы можете легко посмотреть, существует ли значение в ключах словаря, а затем получить соответствующий вывод.
my_lookup_table = {"a": 1, "b": 2, "c": 3}
test_values = ["a", "a", "d", "c"]
for value in test_values:
if value in my_lookup_table.keys():
print(my_lookup_table[value])
# prints 1, 1, 3
Комментарии:
1. это ближе к тому, что я ищу, но это не словарь , это список, где каждый элемент, в свою очередь, является списком
2. Ах, я понимаю, итак, у вас есть список списков, по которым вы хотите выполнить поиск? Пример, похоже, представляет собой список кортежей, поэтому казалось, что вы хотели иметь связь ключ-метка. Вы также можете использовать вложенные словари, поэтому я, вероятно, все же рекомендовал бы преобразовать ваши данные, если они передаются вверх по потоку, или начать со словаря, если вы можете, поскольку это, кажется, лучше подходит для вашей проблемы.
3. Я сказал отчасти потому, что идея, кажется, понятна, идея, но каждый элемент списка A, является предложением . Вы поняли это как ключ, но на самом деле это слово из этого предложения, то самое, которое я ищу в каждом элементе (метке) списка B, то есть это слово есть в списке B. Да / Нет, если оно создает ссылку на это слово (совпадение). Надеюсь, я выразился лучше
Ответ №2:
Исходя из вашего вопроса, похоже, вы хотите проверить, является ли какой-либо из элементов в listA
частью listB
.
Давайте сначала возьмем listA
и преобразуем это в кортеж, который будет выглядеть следующим образом listB
.
listA = ['abc - 123', 'def - 456', '&hi - 789', 'abc - 456']
#this will convert listA into a tuple like listB
listX = [tuple(i.split(' - ')) for i in listA]
Теперь, когда оба listA
и listB
выглядят одинаково, вы можете сравнить их друг с другом.
Приведенный ниже оператор if будет сравнивать каждый элемент listX
с listB
. Если какое-либо из них истинно, то оно выведет 'contains somethin&'
if any(True for i, j in zip(listX, listB) if i == j):
print("contains somethin&")
else:
print("nothin&")
Однако, если вы хотите знать все элементы, которые соответствовали между listA
и listB
, то вы можете использовать следующие две строки
temp = [x for x in listX for b in listB if x == b]
print (temp)
Полный код приведен ниже:
listA = ['abc - 123', 'def - 456', '&hi - 789', 'abc - 456']
listB = [('abc', '123'), ('def', '456'), ('&hi', '789')]
#convert listA into a tuple to compare with listB
listX = [tuple(i.split(' - ')) for i in listA]
#check if any item in listX matches with listB
if any(True for i, j in zip(listX, listB) if i == j):
print("contains somethin&")
else:
print("nothin&")
#for each item that matches from listA with listB, store into temp
temp = [x for x in listX for b in listB if x == b]
#temp contains all matched items betwen listA and listB
print (temp)
Вывод:
contains somethin&
[('abc', '123'), ('def', '456'), ('&hi', '789')]
Комментарии:
1.Разделение (‘-‘) есть
unnecessary
, это был просто пример. То, что я ищу, — это сравнить каждый элементlist A
с каждым элементомlist B
, но не со всеми элементами. Но не со всеми элементами. Я ищуta&
слово элемента Alist A
с В В В В [(URL, label), …}2. основываясь на изменениях в
listA
иlistB
, приведенный выше ответ не будет работать. Вместо этого вы хотите сравнить каждый элементlistA
и посмотреть, находятся ли они вlistB
. Хотели бы вы знать, какому элементу соответствуетlistB
каждый элементlistA
?3. Нет, каждый элемент в списке A является предложением. Что я хочу, так это определить, равно ли слово в этом предложении метке списка B. Естественно, что «предложения» могут содержать это слово более одного раза, поэтому при сравнении с меткой списка B оно было заменено URL-адресом, соответствующим этому тегу. Надеюсь, я лучше прояснил свой вопрос.