Форум сайта python.su
22
можно ли получить ключ по значению в словаре? может есть какая то стандартная функция?
{u'':u'',u'Gorod':u'1',…..}
как получить Gorod, зная значение
спасибо
Офлайн
52
Возможно, стоит подумать над изменением логики работы программы. Ну или созданием второго словаря, если операция критична по времени.
for key, value in dict.iteritems(): if value == needle: print key
Офлайн
22
просто я думал может есть стандартные методы.
примерно так я тоже реализовал, переводил в список и смотрел по второму значнию.
спасибо.
сделаю второй словарь наоборот :)
Офлайн
22
а ещё тогда второй вопрос. нет ли стандартной функци для получения обратного словаря?
ну чтобы опять что-то не ищобретать.
через цикл то сделать смогу, вот так
dic_contacts_reverse={} for i in dic_contacts: dic_contacts_reverse[dic_contacts[i]]=i
Отредактировано ilnur (Май 28, 2012 12:47:38)
Офлайн
52
Если все значения в словаре хешируемы, тогда:
>>> 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() }
Отредактировано fata1ex (Май 28, 2012 12:57:54)
Офлайн
568
>>>>а ещё тогда второй вопрос. нет ли стандартной функци для получения обратного словаря?
Предположим, у Вас есть словарь
d={ 1:2 , 2:2, 3:'a', 4:'a'}Такие?
d={ 2:2, 'a':3}
Или такие?
d={ 2:1, 'a':4}
Или, вероятно, такие?
d={ 2:1, 'a':3}
Отредактировано FishHook (Май 28, 2012 13:47:07)
Офлайн
-2
Непонятно, что делать с дублирующимися значениями. Или тогда делать двухмерный список, или брать только один из дубликатов, или брать все в список.
Офлайн
52
asilyator, как бы об этом уже написал FishHook.
Дублирующие значения можно хранить в ключе-кортеже, что может усугубить доступ к значению в новом словаре до O(n), так как потребуется перебор всех ключей, если ключ не найдётся в словаре сам по себе. В любом случае использовать структуры данных надо с умом, понимая, зачем и когда они нужны. Поддерживать актуальными два словаря тоже не самое приятное занятие, поэтому лучше подумать о другой структуре данных или об абстрагировании реализации через свой класс.
Отредактировано fata1ex (Май 28, 2012 15:41:51)
Офлайн
-2
fata1exЯ описал все возможные решения.
asilyator, как бы об этом уже написал FishHook.
Офлайн
72
Кстати, кроме дубликатов, значение может быть и нехешируемым, например, список
Офлайн