Похоже, что было бы разумнее структурировать ваш словарь наоборот, с ключами, представляющими каждый цвет, а значениями, состоящими из списков друзей, которые выбрали этот цвет.
Это можно сделать вот так:
from collections import defaultdict
color_match = defaultdict(list)
while True:
value = input('Enter the name of your friend: ')
if value == '0':
break
key = input('Enter your friend\'s favorite color: ')
if not (key and value):
break
color_match[key].append(value)
print(color_match)
for key in color_match:
print(f"{key}: {color_match[key]}")
Используя ваш пример, приведенное выше будет напечатать:
Blue: ['Eric', 'Bob']
Red: ['Tom']
Использование defaultdict со значением по умолчанию типа «список» вместо обычного словаря позволяет нам для добавления значений списка, даже если указанный ключ еще не существует.
Если вы хотите, чтобы в распечатанных результатах каждое имя было разделено запятыми, вы могли бы добиться этого, немного изменив последние несколько строк:
for key in color_match:
array_string = ", ".join(color_match[key])
print(f"{key}: {array_string}")
Одна вещь, о которой нужно помнить состоит в том, что «красный» и «красный» приведут к двум различным ключам словаря, поскольку они не являются идентичными строками. Для защиты от этого может быть полезно добавить строку:
value = value[0].upper() + value[1:].lower()
после блока "if value == '0':
.
Это гарантирует, что «blue», «bLue», «BLUE» "или любой другой вариант будет отмечен как" Синий ".