Хочу написать функцию на языке Python, где ключами будут строки, а значениями - числа

SJlOBAPb = {1: 'аcc', 2: 'сab', 3: 'ccb'} 
a = SJlOBAPb.items()
def obratka(a):
    return {i: k for k, i in a}
print(obratka(a))

Вывод: {'аcc': 1, 'сab': 2, 'ccb': 3}

Хочу сделать: {'а': [1,2], 'b': [2,3], 'c': [1,1,2,3,3]}

P.S Пробовал использовать list(SJlOBAPb.items()), но там тоже сложно выходит.


Ответы (1 шт):

Автор решения: Владислав Харламов

Если я правильно понял задание, то вот так:

from collections import defaultdict

dictionary = {1: 'acc', 2: 'cab', 3: 'ccb'} # Исходный пример
alphabet_set = set() # Создаем множество в котором будем хранить уникальные символы из наших значений


for value in dictionary.values(): # В данном цикле добавляем уникальные из значений символы в множество
    for char in value:
        alphabet_set.add(char)

alphabet_dict_positions = defaultdict(list) # Создаем словарь, где по умолчанию каждое значение у каждого ключа пустой список, чтобы удобнее было добавлять.

for char in alphabet_set: # В данном цикле проходимся по всем символам из нашего множества и ищем по каким ключам оно встретилась, если встретилось, добавляем значение ключа.
    for key, value in dictionary.items():
         alphabet_dict_positions[char].extend([key] * value.count(char))
        
print(alphabet_dict_positions) 
#output: defaultdict(<class 'list'>, {'c': [1, 1, 2, 3, 3], 'b': [2, 3], 'a': [1, 2]})
→ Ссылка