2014-02-18 2 views
1

Словарь значения списка:Как получить ключ от значения в словаре python?

dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]} 

Как получить ключ 5, который "DEF" из dictionary_1 в Python?

+0

Вы имеете в виду, что у вас есть вход '5', и вы хотите вернуть' 'DEF' '? Или наоборот? –

+0

Возможно, вы хотите использовать двухсторонний словарь: https://pypi.python.org/pypi/bidict/0.1.1 – simonzack

+0

@lc. да, у меня есть '5', и я хочу получить его ключ (какой идентификатор DEF). – alwbtc

ответ

1

Может быть, так?

my_value = 5 
for k, v in dictionary_1.iteritems(): 
    if my_value in v: 
     print k 
     break 
else: 
    print "No key, defaulting to GHJ" 

Демо:

In [12]: my_value = 8 

    In [13]: for k, v in dictionary_1.iteritems(): 
     if my_value in v: 
      print "Key for %s is %s" % (my_value, k) 
      break 
    else: 
     print "No key found for %s, defaulting to GHJ" % my_value 

    No key found for 8, defaulting to GHJ 
+0

Если элемент не найден в словаре, он должен вернуть значение по умолчанию, например «GHJ». Как бы вы сделали это выше? – alwbtc

+0

@alwbtc обновил мой ответ. Это шаблон для/else, если ключ не найден, код никогда не будет «ломаться», и будет выполняться условие 'else'. – msvalkon

1

Вы должны будете искать через словарь для этого:

try: 
    key = next(k for k, v in dictionary_1.iteritems() if 5 in v) 
except StopIteration: 
    raise KeyError('Key for 5 not found') 

Это предполагает, что вы ищете ключа. Для того, чтобы найти все ключи вы можете использовать список понимание:

keys = [k for k, v in dictionary_1.iteritems() if 5 in v] 

где список может быть пустым.

+0

Не видел с помощью 'next' таким образом..thanks. – rajpy

+0

@alwbtc: Если вы хотите использовать значение по умолчанию, используйте этот ключ: key = next ((k для k, v в d.iteritems(), если 9 из v), 'GHJ') 'и удалить try..except. – rajpy

0

Один из способов сделать это:

dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]} 
for k, v in dictionary_1.items(): 
    if 5 in v: 
     print(k) 
2

Вы можете создать обратный Dict:

>>> d = {i:k for k,v in dictionary_1.items() for i in v} 
>>> d 
{1: 'ABC', 2: 'ABC', 3: 'ABC', 4: 'DEF', 5: 'DEF', 6: 'DEF'} 
>>> d[5] 
'DEF' 
+1

При условии, что значения уникальны. –

+0

Это хороший вариант, потому что op хотел по умолчанию использовать ключ 'GHJ' (в комментариях к моему ответу). Поэтому вы можете просто называть 'd.get (5," GHJ ")' – msvalkon

0

Предполагая, что вы можете проверить, если 5 находится в [4,5,6] списка, вы также можете попробовать:

dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]} 

print dictionary_1.keys()[dictionary_1.values().index([4,5,6])] 
Смежные вопросы