fbpx

Поиск одинакового элемента в словарях

402 просмотра
0
0 Комментариев

Добрый вечер уважаемые пользователи!
Есть 2 словаря: MinIndex и TrainIndex, у них одинаковые ключи, но разное количество элементов в ключах.

MinIndex = {'ВСТАВИТЬ':   [[0, 4]],
            'ЗАКРЫТЬ':    [[3, 8]],
            'УДАЛИТЬ':    [[0, 6]]}
 
TrainIndex = {'ВСТАВИТЬ':   [0, 1, 2],
                'ЗАКРЫТЬ':    [3, 4, 5],
                'УДАЛИТЬ':    [6, 7, 8]}

Задача — пройтись по каждому элементу в MinIndex, найти этот элемент в TrainIndex и взять из последнего ключ, к которому принадлежит найденный элемент.
Мой вариант выглядит следующим образом, к сожалению работает неверно:

for class_name2 in MinIndex:
    for index in MinIndex[class_name2]:
        Word = 1
        for i in index:
            for class_name_train in TrainIndex:
                ElemNumb = 0
                for lists2 in TrainIndex[class_name_train]:
                    if i == TrainIndex[class_name_train][ElemNumb]:
                        Rec = class_name_train
                        ElemNumb += 1
            print('Тестовому слову', Word, 'из класса', class_name2,'соответствует слово', Rec, '(по индексу',i,')')
            Word += 1
Out[1]:
    Тестовому слову 1 из класса ВСТАВИТЬ соответствует слово ВСТАВИТЬ (по индексу 0 )
    Тестовому слову 2 из класса ВСТАВИТЬ соответствует слово ВСТАВИТЬ (по индексу 4 )
    Тестовому слову 1 из класса ЗАКРЫТЬ соответствует слово ЗАКРЫТЬ (по индексу 3 )
    Тестовому слову 2 из класса ЗАКРЫТЬ соответствует слово ЗАКРЫТЬ (по индексу 8 )
    Тестовому слову 1 из класса УДАЛИТЬ соответствует слово ВСТАВИТЬ (по индексу 0 )
    Тестовому слову 2 из класса УДАЛИТЬ соответствует слово УДАЛИТЬ (по индексу 6 )

Желаемый вывод выглядит следующим образом:

Тестовому слову 1 из класса ВСТАВИТЬ соответствует слово ВСТАВИТЬ (по индексу 0)
Тестовому слову 2 из класса ВСТАВИТЬ соответствует слово **ЗАКРЫТЬ** (по индексу 4)
Тестовому слову 1 из класса ЗАКРЫТЬ соответствует слово ЗАКРЫТЬ (по индексу 3)
Тестовому слову 2 из класса ЗАКРЫТЬ соответствует слово **УДАЛИТЬ** (по индексу 8)
Тестовому слову 1 из класса УДАЛИТЬ соответствует слово ВСТАВИТЬ (по индексу 0)
Тестовому слову 2 из класса УДАЛИТЬ соответствует слово УДАЛИТЬ (по индексу 6)


Добавить комментарий

2 Answers

Python Опубликовано 22.05.2019
0

MinIndex = {'ВСТАВИТЬ': [[0, 4], [1, 2]],
            'ЗАКРЫТЬ':  [[3, 8], [5, 7]],
            'УДАЛИТЬ':  [[0, 6], [3, 8]]}
 
TrainIndex = {'ВСТАВИТЬ': [0, 1, 2],
              'ЗАКРЫТЬ':  [3, 4, 5],
              'УДАЛИТЬ':  [6, 7, 8]}
 
TemporaryIndex = {}
for key, value in TrainIndex.items():
    for num in value:
        TemporaryIndex[num] = key
 
for key, values in MinIndex.items():
    for global_index, value in enumerate(values):
        for local_index, num in enumerate(value):
            print('Тестовому слову {0}.{1} из класса {2} соответствует слово {3} (по индексу {4})'.format(
                global_index + 1,
                local_index + 1,
                key,
                TemporaryIndex[num],
                num))

Результат:

Тестовому слову 1.1 из класса ЗАКРЫТЬ соответствует слово ЗАКРЫТЬ (по индексу 3)
Тестовому слову 1.2 из класса ЗАКРЫТЬ соответствует слово УДАЛИТЬ (по индексу 8)
Тестовому слову 2.1 из класса ЗАКРЫТЬ соответствует слово ЗАКРЫТЬ (по индексу 5)
Тестовому слову 2.2 из класса ЗАКРЫТЬ соответствует слово УДАЛИТЬ (по индексу 7)
Тестовому слову 1.1 из класса ВСТАВИТЬ соответствует слово ВСТАВИТЬ (по индексу 0)
Тестовому слову 1.2 из класса ВСТАВИТЬ соответствует слово ЗАКРЫТЬ (по индексу 4)
Тестовому слову 2.1 из класса ВСТАВИТЬ соответствует слово ВСТАВИТЬ (по индексу 1)
Тестовому слову 2.2 из класса ВСТАВИТЬ соответствует слово ВСТАВИТЬ (по индексу 2)
Тестовому слову 1.1 из класса УДАЛИТЬ соответствует слово ВСТАВИТЬ (по индексу 0)
Тестовому слову 1.2 из класса УДАЛИТЬ соответствует слово УДАЛИТЬ (по индексу 6)
Тестовому слову 2.1 из класса УДАЛИТЬ соответствует слово ЗАКРЫТЬ (по индексу 3)
Тестовому слову 2.2 из класса УДАЛИТЬ соответствует слово УДАЛИТЬ (по индексу 8)

Добавить комментарий
0

for key, val in MinIndex.items():
    for i,v in enumerate(val[0]):
        for key2, val2 in TrainIndex.items():
            if v in val2:
                print('Тестовому слову', i + 1, 'из класса', key, 'соответствует слово', key2, '(по индексу', v,
                      ')')

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up