Отборка и сортировка массива

Доброе время суток, прошу помочь в одной задаче с которой уже не первый дьнь не могу разобраться, нужно из ассоциированного массива извлечь все одинаковые значения и перенести отдельно, добавив новый элемент например есть массив :
arr = {'a': [1,2,3], 'b': [6,7,8], 'c': [7,11,2], 'e': [45,2,10]}

инужно получить примерно это
res = {'a': [1,3], 'b': [6,8], 'c': [11], 'e': [45,10], 'a,c,e':[2], 'b,c': [7]}

Варианты предлагать на любом языке программирования.
  • Вопрос задан
  • 2855 просмотров
Решения вопроса 1
mututunus
@mututunus
Backend developer (Python, Golang)
Плохо читается, но работает:
arr = {'a': [1,2,3], 'b': [6,7,8], 'c': [7,11,2], 'e': [45,2,10]}
res_arr = []
for key, value in arr.items():
    for v in value:
        for r in res_arr:
            if v in r['key']:
                r['value'].add(key)
                break
        else:
            res_arr.append({
                'key': set([v]),
                'value': set([key])
            })

res_dict = {}
for r in res_arr:
    key = ','.join(r['value'])
    if res_dict.get(key):
        res_dict[key].extend(r['key'])
    else:
        res_dict[key] = list(r['key'])
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MrButek
from functools import reduce
from operator import add

def yolo(arr):
	unique = set
	def concatenate(lists):
		return reduce(add, lists)
	def keys_for(val):
		return [key for key in arr if val in arr[key]]
	def pairs():
		return [(keys_for(val), val) for val in unique(concatenate(arr.values()))]
	result = {}
	for pair in pairs():
		keys, val = ','.join(pair[0]), pair[1]
		if keys not in result:
			result[keys] = []
		result[keys].append(val)
	return result
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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