Для этого есть 2 разных решения. Могут ли элементы кортежа обмениваться друг с другом? Вот так
Input = [('Vanilla', 'Icecream'), ('Icecream', 'Chocolate'), ('Icecream', 'Strawberry')]
Если нет, ответ прост. Вы можете использовать счетчик и некоторое время l oop (использование l oop важно, поскольку для l oop обхода внутри клона списка, насколько я помню в python, так что это может быть проблемой), чтобы пройти в списке для каждого элемента отметьте остальные элементы. Давайте закодируем его.
Прежде всего, важно поменять вторые элементы в списке. Нам нужен такой ввод
Input = [('Icecream', ['Vanilla']), ('Icecream', ['Chocolate']), ('Icecream', ['Strawberry'])]
Для этого все должно работать
for tuple in Input:
tuple[1] = [tuple[1]]
После организации нашего ввода теперь мы можем делать то, что вы хотите
counter = 0
while counter<len(Input):
for tuple in Input[counter+1:]:
if Input[counter][0] == tuple[0]:
Input[counter][1].append(tuple[1][0])
Input.remove(tuple)
counter = counter+1
Я не пробовал (так что могут быть ошибки), но я надеюсь, что вы понимаете, что я пытался сделать. Я уверен, что вы можете реализовать его в своем собственном коде со своим собственным стилем.
Кстати, использование словарного типа данных вместо списка кортежей будет намного проще. Предлагаю вам поискать словари.