Как найти ключ в someDictionary
, который соответствует элементу в someList
?
В словаре используются сопоставления ключей со значениями.Обратное невозможно во время O (1).Но вы можете выполнять итерацию за O ( n ), пока не сможете сопоставить элемент списка со значением словаря.
Вы можете использовать для этого простой цикл for
, либо итерируя свой словарьили список.
d = {'1': 33, '2': 44, '3': 55, '4': 10, '5': 66, '6': 60}
L = [51, 52, 53, 54, 55, 56]
def find_key_dict(d, L):
L_set = set(L) # convert to set for O(1) lookup
for k, v in d.items():
if v in L_set:
return k
def find_key_list(d, L):
d_rev = {v: k for k, v in d.items()} # reverse dict for value -> key map
for i in L:
if i in d_rev:
return d_rev[i]
find_key_dict(d, L) # '3'
find_key_list(d, L) # '3'
Также возможно переписать эти функции в виде 1-строчных выражений генератора с next
, но это не обязательно будет более эффективным.
Вторая часть, которую мне нужно сделать, если someList
не содержит элемент, который находится в someDictionary
, найти значение в someDictionary
больше, чем (но ближайший к) последний элемент в someList
Вы можете написать аналогичную функцию, используя конструкцию for... else...
с min
:
def find_key_dict(d, L):
L_set = set(L) # convert to set for O(1) lookup
for k, v in d.items():
if v in L_set:
return k
else:
def min_func(x):
diff = x[1] - L[-1]
return diff <= 0, diff
return min(d.items(), key=min_func)[0]
find_key_dict(d, L) # '6'