Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Получить ключ по значению

#python #python_3x


Есть словарь:

d = {'a': '1', 'b': '2', 'c': '3'}


и есть строка: 

stroka = 'a3a2c'


Если элемент строки есть среди значений словаря, необходимо вывести соответствующий
значению ключ. Если среди ключей - то вывести значение по ключу значение. Вывести необходимо
в две строки, значения отдельно от ключей.

Т.е. для строки 'a3a2c' ожидаемый вывод '113' и 'cb'


Как вывести значения по ключу - я разобрался:

for i in stroka:
    if i in d.keys():
        print(d[i], end='')


А вот вывести ключ по значению у меня не получается:

for j in stroka:
    if j in d.values():
        print(?????, end='')

    


Ответы

Ответ 1



Как то так: d = { 1: '1', '2': 2, 3: '3', } def get_key(d, value): for k, v in d.items(): if v == value: return k print(get_key(d, '1')) print(get_key(d, 2)) print(get_key(d, 42)) Консоль: 1 2 None Вообще, когда мне нужно получать значение по ключу и ключ по значению, я завожу два словаря.

Ответ 2



Т.е. для строки 'a3a2c' ожидаемый вывод '113' и 'cb' Если есть словарь d и коллекция ключей keys, то чтобы получить соответствующие значения, используя default значения для отсутствующих ключей: def get_values(d, keys, default=None): return (d.get(k, default) for k in keys) Пример: d = {'a': '1', 'b': '2', 'c': '3'} s = 'a3a2c' print(''.join(get_values(d, s, ''))) # -> 113 inv_d = dict(zip(d.values(), d.keys())) print(''.join(get_values(inv_d, s, ''))) # -> cb Если хочется сразу отфильтровать отсутствующие ключи: def get_existing_values(d, keys): return filter(None, map(d.get, keys)) Пример: >>> ''.join(get_existing_values(inv_d, s)) 'cb'

Ответ 3



d=dict(a='1',b='2',c='3') # первый словарь print(d) stroka = 'a3a2c' print('stroka=',stroka) for m in stroka: #поиск элементов из stroka в ключах d if m in d.keys(): #вывод значений этих лючей print('буква ', m, 'из строки "stroka" является ключом значения ', d[m]) s=[] for i in d.keys(): #второй s.append((d[i],i)) #словарь b=dict(s) #является обратным для первого #значения являются ключами, а ключи значениями stroka_=stroka for i in stroka_: #поиск элементов из stroka в значениях d if i in b.keys(): #вывод ключей этих значений print('цифра ', i, 'из строки "stroka" является значением ключа', b[i]) Но задача была бы чуть интересней, если бы представление значений словаря было не строчным, а целочисленным.

Ответ 4



Для словаря {'a': 1, 'b': 2, 'c': 3} (значения словаря являются элементами типа int) d=dict(a=1,b=2,c=3) # первый словарь print(d) stroka = 'a3a2c' print('stroka=',stroka) for m in stroka: #поиск элементов из stroka в ключах d if m in d.keys(): #вывод значений этих лючей print('буква ', m, 'из строки "stroka" является ключом значения ', d[m]) s=[] for i in d.keys(): #второй s.append((d[i],i)) #словарь b=dict(s) #является обратным для первого #значения являются ключами, а ключи значениями stroka_=stroka #stroka_ = 'a3a2c' #поиск элементов из stroka в значениях d #вывод ключей этих значений v=','.join(str(b.keys())) #v=d,i,c,t,_,k,e,y,s,(,[,1,,, ,2,,, ,3,],) s_=[] for i in v: try: s_.append(int(i)) except ValueError as e: continue # s_= [1, 2, 3] i=0 while i < len(s_): s_[i]=str(s_[i]) i+=1 # s_= ['1', '2', '3'] #поиск элементов из stroka в значениях d #вывод ключей этих значений for i in stroka_: #stroka_ = 'a3a2c' if i in s_: # s_= ['1', '2', '3'] print('значение', stroka_[stroka_.index(i)], 'из строки "stroka" является значением ключа', b[int(i)])

Ответ 5



for key in a: print ("%s -> %s" % (key, a[key])) #python3

Ответ 6



решил вашу проблему немного по-другому. просто превратите ключи словаря в tuple методом list() и сохраните его в новой переменной, затем вызовите значения ключа и сохраните его в переменной, и в конце уже можно print(переменная_1[индекс ключа которую вы сохранили], переменная_2[индекс ключ]

Комментариев нет:

Отправить комментарий