Необходимо стараться написать общий алгоритм решения задачи, а не перебрать допустимые варианты. Это можно делать даже без использования конкретного языка программирования, пользуясь лишь логическими утверждениями. Например: для начала подсчитаем количество вхождений каждого из значений в словаре (см.
counter в коде). Затем выберем наименьшее уникальное значение. Для этого необходимо
отфильтровать массив уникальных, затем отсортировать его по возрастанию и взять первый элемент (см.
lowest_unique = (sorted([k for k in counter if counter[k] == 1]) or [None])[0]). Теперь необходимо найти ключ в начальном словаре, соответствующий найденному минимальному значению. Можно, конечно, перебрать все ключи в словаре и проверить их значения, но это долго. Если же сделать отражение начального словаря (переворот, flip), то заданное значение ключа можно будет найти простейшим обращением
flipped_dict[lowest_unique]. Делаем переворот:
flipped_dict = dict(zip(initial_dict.values(), initial_dict.keys())).
Полная версия кода:
initial_dict = {'Foo': 23, 'Bar': 26, 'Baz': 45, 'Bang': 23}
flipped_dict = dict(zip(initial_dict.values(), initial_dict.keys()))
# print(flipped_dict)
# {26: 'Bar', 45: 'Baz', 23: 'Foo'}
counter = {}
for k in initial_dict:
val = initial_dict[k]
counter[val] = counter.get(val, 0) + 1
# print(counter)
# {26: 1, 45: 1, 23: 2}
lowest_unique = (sorted([k for k in counter if counter[k] == 1]) or [None])[0]
if lowest_unique is None:
print("Not found!")
else:
print("Found [%s]->[%s]" % (flipped_dict[lowest_unique], lowest_unique))