Как обьединить 2 списка в 1 словарь на Python?

Есть 2 списка:
ID_Masterok = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ID_Master = ['Интендификатор мастера', '654', '2425', '654', '654', '—', '—', '—', '—', '—', '—']

Выполняя:
ID_Mastework = dict(zip(ID_Master, ID_Masterok))
Выдает: {'Интендификатор мастера': 0, '654': 4, '2425': 2, '—': 10}

Мне нужно получить что-то такое: {'Интендификатор мастера': 0, '654': [1, 3, 4], '2425': 2, '—': [7, 8, 9, 10]}
  • Вопрос задан
  • 127 просмотров
Решения вопроса 2
@Drill
def mastework(id_key, id_value):
    id_join = {}
    for k, v in zip(id_key, id_value):
        id_join[k] = id_join.get(k, []) + [v]
    return {k:v if len(v) > 1 else v[0] for k, v in id_join.items()}


Пример:
ID_Masterok = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ID_Master = ['Интендификатор мастера', '654', '2425', '654', '654', '—', '—', '—', '—', '—', '—']

ID_Mastework = mastework(ID_Master, ID_Masterok)
print(ID_Mastework)

In [55]:
{'Интендификатор мастера': 0, '654': [1, 3, 4], '2425': 2, '—': [5, 6, 7, 8, 9, 10]}
Ответ написан
aRegius
@aRegius
Python Enthusiast
from collections import defaultdict
dict_result = defaultdict(list)
for index, key in enumerate(id_master):
        dict_result[key].append(index)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
не видел такой функции, проще написать руками:
def zzip(ID_Master,ID_Masterok):
	result = {}
	for i in ID_Masterok:
		if ID_Master[i] in result:
			if isinstance(result[ID_Master[i]],list):
				result[ID_Master[i]].append(i)
			else:
				result[ID_Master[i]] = [result[ID_Master[i]],i]
		else:
			result[ID_Master[i]] = i
	return result
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы