Словарь значения списка:Как получить ключ от значения в словаре python?
dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]}
Как получить ключ 5
, который "DEF"
из dictionary_1
в Python?
Словарь значения списка:Как получить ключ от значения в словаре python?
dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]}
Как получить ключ 5
, который "DEF"
из dictionary_1
в Python?
Может быть, так?
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
Вы должны будете искать через словарь для этого:
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]
где список может быть пустым.
Один из способов сделать это:
dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]}
for k, v in dictionary_1.items():
if 5 in v:
print(k)
Вы можете создать обратный 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'
При условии, что значения уникальны. –
Это хороший вариант, потому что op хотел по умолчанию использовать ключ 'GHJ' (в комментариях к моему ответу). Поэтому вы можете просто называть 'd.get (5," GHJ ")' – msvalkon
Предполагая, что вы можете проверить, если 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])]
Вы имеете в виду, что у вас есть вход '5', и вы хотите вернуть' 'DEF' '? Или наоборот? –
Возможно, вы хотите использовать двухсторонний словарь: https://pypi.python.org/pypi/bidict/0.1.1 – simonzack
@lc. да, у меня есть '5', и я хочу получить его ключ (какой идентификатор DEF). – alwbtc