Надо из значений словаря сделать новый словарь где значения являются ключом а ключ значением
У меня есть словарь
{12:['text','text2'], 45:['text2','text3']}
Надо получить
{'text': [12], 'text2': [12,45], 'text3':[45]}
У меня есть код. Но он работает очень медленно(Мне нужно код для работы с большим количеством данных Python).
new_data = {}
data = some_dict
keys = data.keys()
for list in data.values():
for word in list:
for key in keys:
if word in data[key]:
try:
new_data[word] += [key]
except KeyError:
new_data[word] = [key]
Ответы (4 шт):
можно сделать так:
data = {12:['text','text2'], 45:['text2','text3']}
res = dict()
for key, values in data.items():
for value in values:
res[value] = res.get(value, []) + [key]
возможно для больших объёмов данных такой код будет работать быстрее:
res = dict()
for key, values in data.items():
for value in values:
if value not in res:
res[value] = [key]
else:
res[value].append(key)
Можете использовать defaultdict из модуля collections ссылка.
from collections import defaultdict
d1 = {12:['text','text2'], 45:['text2','text3']}
d2 = defaultdict(list)
for key, values in d1.items():
for value in values:
d2[value].append(key)
Предлагаю создать словарь "в обратную сторону". Например, если имя человека - ключ, а номер телефона - значение, то можно создать обратный словарь, где ключом будет номер телефона, а значением - имя человека. Например, ваш первоначальный словарь был dct. Создаем пустой словарь dict2 = {}.
for key in sorted(dct):
dict2[dct[key]] = key
Мы перебираем имена, берем dict от имени (это номер телефона) и говорим, что в dict2 с номером телефона сопоставляется имя.
d1 = {12: ['text', 'text2'], 45: ['text2', 'text3']}
d2 = {}
for k, vv in d1.items():
for v in vv:
d2.setdefault(v, []).append(k)