Найти - Пользователи
Полная версия: получить ключ по значению в словаре
Начало » Python для новичков » получить ключ по значению в словаре
1 2
ilnur
можно ли получить ключ по значению в словаре? может есть какая то стандартная функция?

{u'':u'',u'Gorod':u'1',…..}

как получить Gorod, зная значение

спасибо
fata1ex
Возможно, стоит подумать над изменением логики работы программы. Ну или созданием второго словаря, если операция критична по времени.

for key, value in dict.iteritems():
        if value == needle:
                print key
ilnur
просто я думал может есть стандартные методы.

примерно так я тоже реализовал, переводил в список и смотрел по второму значнию.

спасибо.

сделаю второй словарь наоборот :)
ilnur
а ещё тогда второй вопрос. нет ли стандартной функци для получения обратного словаря?

ну чтобы опять что-то не ищобретать.

через цикл то сделать смогу, вот так

dic_contacts_reverse={}
for i in dic_contacts:
	dic_contacts_reverse[dic_contacts[i]]=i
fata1ex
Если все значения в словаре хешируемы, тогда:

>>> d = { 1: (1,2), 2: 3, 4: 'aaa', '5': 6 }
>>> rd = dict(map(lambda x: x[::-1], d.iteritems()))
>>> d
{1: (1, 2), 2: 3, '5': 6, 4: 'aaa'}
>>> rd
{(1, 2): 1, 3: 2, 'aaa': 4, 6: '5'}

Или попроще:
{ v: k for k,v in d.iteritems() }

Стандартной функции не встречал.
FishHook
>>>>а ещё тогда второй вопрос. нет ли стандартной функци для получения обратного словаря?
Предположим, у Вас есть словарь
d={ 1:2 , 2:2, 3:'a', 4:'a'}
Какие значения вы хотите получить в обратном словаре?
Такие?
d={ 2:2, 'a':3}
Или такие?
d={ 2:1, 'a':4}
Или, вероятно, такие?
d={ 2:1, 'a':3}
А вот не угадаете, что там получится, ибо словарь не сортируется!
Посему идея не очень хороша.
asilyator
Непонятно, что делать с дублирующимися значениями. Или тогда делать двухмерный список, или брать только один из дубликатов, или брать все в список.
fata1ex
asilyator, как бы об этом уже написал FishHook.

Дублирующие значения можно хранить в ключе-кортеже, что может усугубить доступ к значению в новом словаре до O(n), так как потребуется перебор всех ключей, если ключ не найдётся в словаре сам по себе. В любом случае использовать структуры данных надо с умом, понимая, зачем и когда они нужны. Поддерживать актуальными два словаря тоже не самое приятное занятие, поэтому лучше подумать о другой структуре данных или об абстрагировании реализации через свой класс.
asilyator
fata1ex
asilyator, как бы об этом уже написал FishHook.
Я описал все возможные решения.
PooH
Кстати, кроме дубликатов, значение может быть и нехешируемым, например, список
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