#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[индекс ключ]
Комментариев нет:
Отправить комментарий