Из вашего комментария к ответу Гнибблера звучит так, как будто есть многократное вхождение значения, вы заботитесь только о самом раннем появлении.В этом случае предложенный замененный (значение, ключ) -директорий все еще может быть использован, но с незначительными изменениями в том, как вы его построите.
xs = {0: 'a', 1: 'b', 2: 'a'}
ys = {}
for k, v in xs.iteritems():
if v not in ys or k < ys[v]:
ys[v] = k
Затем вы можете определить функцию, которая сообщит вам, какой из двухзначения отображаются в меньший индекс:
def earlier(index_map, a, b):
"""Returns `a` or `b` depending on which has a smaller value in `index_map`.
Returns `None` if either `a` or `b` is not in `index_map`.
"""
if a not in index_map or b not in index_map:
return None
if index_map[a] < index_map[b]:
return a
return b
Использование:
print earlier(ys, 'a', 'b')
Здесь есть некоторые тонкости, решение которых зависит от вашей конкретной проблемы.
- Чтодолжно произойти, если
a
или b
не в index_map
?Прямо сейчас мы возвращаем None
. - Что должно произойти, если
index_map[a] == index_map[b]
?Из ваших комментариев это звучит так, как будто это может не произойти в вашем случае, но вы должны рассмотреть это.Прямо сейчас мы возвращаем b
.