2015-10-28 1 views
2

У меня есть список:Как проверить, если слово появляется в ID (место в списке элементов) другое слово (ключ)

lst = [" ","1- make your choice", "2- put something and make", "3- make something happens", 
"4- giulio took his choice so make","5- make your choice", "6- put something and make", 
"7- make something happens", "8- giulio took his choice so make","9- make your choice", 
"10- put something and make", "11- make something happens", "12- giulio took his choice so make"] 

я создал два словаря, первый, где я, как ключ идентификатора (число) позиции слов в lst, а в значении i есть слова в этой позиции.

{1: ['make', 'your', 'choice'], 2: ['put', 'something', 'and', 'make'], 3: ['make', 'something', 'happens'], 4: ['giulio', 'took', 'his', 'choice', 'so', 'make'], 5: ['make', 'your', 'choice'], 6: ['put', 'something', 'and', 'make'], 7: ['make', 'something', 'happens'], 8: ['giulio', 'took', 'his', 'choice', 'so', 'make'], 9: ['make', 'your', 'choice'], 10: ['put', 'something', 'and', 'make'], 11: ['make', 'something', 'happens'], 12: ['giulio', 'took', 'his', 'choice', 'so', 'make']} 

Во втором dictionarie, как ключ у меня есть все слова в LST, а в качестве значения у меня есть два набора()

{'and': (set([]), set([2, 10, 6])), 'happens': (set([]), set([11, 3, 7])), 'his': (set([]), set([8, 12, 4])), 'giulio': (set([]), set([8, 12, 4])), 'make': (set([]), set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])), 'took': (set([]), set([8, 12, 4])), 'choice': (set([]), set([1, 4, 5, 8, 9, 12])), 'so': (set([]), set([8, 12, 4])), 'something': (set([]), set([2, 3, 6, 7, 10, 11])), 'put': (set([]), set([2, 10, 6])), 'your': (set([]), set([1, 5, 9]))} 

Во втором наборе я положил все ID, где ключ расположен, например:

'choice': (set([]), set([1, 4, 5, 8, 9, 12])) 

В первых секунд et i хочу поместить все слова, которые одновременно находятся во всем идентификаторе выбора ключа, например:

Если мы посмотрим в lst, мы увидим, что единственное слово, которое появляется во всем идентификаторе выбора ключа, это «make», , поэтому результат ключа выбора является:

'choice': (set(['make']), set([1, 4, 5, 8, 9, 12])) 

кроме слова «выбор», конечно

любое предложение о том, чтобы увидеть, если это слово появляется все тот же идентификатор ключа второго словаря ? и положить его в первый сет?

+0

Это будет намного проще, если в первом вместо списков у вас есть наборы. –

ответ

1

Вы можете повторить идентификацию, свернуть все списки в один большой список и проверить, соответствует ли каждое слово count числу списков.

Это только один вариант, который можно сделать с менее дорогостоящим потоком, но я не хотел усложнять ситуацию.

Решение:

my_dict = {1: ['make', 'your', 'choice'], 2: ['put', 'something', 'and', 'make'], 3: ['make', 'something', 'happens'], 4: ['giulio', 'took', 'his', 'choice', 'so', 'make'], 5: ['make', 'your', 'choice'], 6: ['put', 'something', 'and', 'make'], 7: ['make', 'something', 'happens'], 8: ['giulio', 'took', 'his', 'choice', 'so', 'make'], 9: ['make', 'your', 'choice'], 10: ['put', 'something', 'and', 'make'], 11: ['make', 'something', 'happens'], 12: ['giulio', 'took', 'his', 'choice', 'so', 'make']} 
words = {'and': (set([]), set([2, 10, 6])), 'happens': (set([]), set([11, 3, 7])), 'his': (set([]), set([8, 12, 4])), 'giulio': (set([]), set([8, 12, 4])), 'make': (set([]), set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])), 'took': (set([]), set([8, 12, 4])), 'choice': (set([]), set([1, 4, 5, 8, 9, 12])), 'so': (set([]), set([8, 12, 4])), 'something': (set([]), set([2, 3, 6, 7, 10, 11])), 'put': (set([]), set([2, 10, 6])), 'your': (set([]), set([1, 5, 9]))} 

for k, v in words.items(): 
    flatten_list = [elem for id_ in v[1] for elem in my_dict[id_]] 
    words[k][0].update(set([word for word in flatten_list if word != k if flatten_list.count(word) == len(v[1])])) 

print words 

Выход:

{'and': (set(['put', 'make', 'something']), set([2, 10, 6])), 'his': (set(['make', 'so', 'giulio', 'took', 'choice']), set([8, 4, 12])), 'took': (set(['make', 'his', 'so', 'giulio', 'choice']), set([8, 4, 12])), 'choice': (set(['make']), set([1, 4, 5, 8, 9, 12])), 'something': (set(['make']), set([2, 3, 6, 7, 10, 11])), 'put': (set(['and', 'make', 'something']), set([2, 10, 6])), 'your': (set(['make', 'choice']), set([1, 5, 9])), 'happens': (set(['make', 'something']), set([3, 11, 7])), 'giulio': (set(['make', 'his', 'so', 'took', 'choice']), set([8, 4, 12])), 'make': (set([]), set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])), 'so': (set(['make', 'his', 'giulio', 'took', 'choice']), set([8, 4, 12]))} 
Смежные вопросы