Найти - Пользователи
Полная версия: получить ключ по значению в словаре
Начало » Python для новичков » получить ключ по значению в словаре
1 2
FishHook
asilyator
fata1ex
asilyator, как бы об этом уже написал FishHook.
Я описал все возможные решения.
asilyator
{u'':u'',u'Gorod':u'1',…..}

как получить Gorod, зная значение
Объясните, как вы хотите получить Gorod в случае такого словаря?
{u'':u'', u'Gorod':u'1', 'Gorod':u'2', 'Selo':u'1', 'Selo':u'2'}
Очевидно же, что Ваша программа написана концептуально неправильно.
ilnur
спасибо. этого я не учел.
буду искать другие пути решения задачи
fata1ex
Честно попробовал написать ReversedDict. Получилось, что структура (как и ожидалось) не оправдывает своего использования. При вставке нового ключа приходится проверять все существующие ключи и ключи-кортежи из-за подобных словарей { 1: 2, 3: (4,2) }. В таком случае приходится перехешировать значения дублирующихся ключей { 2: (1,3), 4: 3 }. Так же непонятно, что мы ходим сделать операцией d(2) - заменить или вставить новое значение. Короче, бредятина :)

При удалении, проверке на вхождение и при доступе к значению получается тоже самое. В общем, реализовать ReversedDict можно (переписав getitem, setitem, getattr, contains, str и тд от стандартного dict), но полученную радость лучше спрятать от людских глаз.

Насчет хеширования нехешируемых объектов проблем немного. Использование isinstance(value, collections.Hashable), рекурсия и возможности питона превращать всё движущееся в кортеж решает вопрос довольно просто.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB