from itertools import chain, groupby
import collections

k = 1
class artigo:
	def __init__(self, neighbors = None):
		global k
		if neighbors == None:
			neighbors = []
		self.neighbors = neighbors
		self.name = "artigo {}".format(k)
		k += 1

artigo1 = artigo(['a', 'b', 'c'])
artigo2 = artigo(['a', 'd', 'f'])
artigo3 = artigo(['z', 'd', 'f'])

artigos = (artigo1, artigo2, artigo3)

# Montando o multimapa que liga tags a artigos
mm_tag_artigo = collections.defaultdict(list)

for artigo, tag in [(artigo, tag) for artigo in artigos for tag in artigo.neighbors]:
	mm_tag_artigo[tag].append(artigo)

for x in artigos:
	print("artigo {} tem como vizinhos...".format(x.name))
	print([artigo_vizinho.name for artigo_vizinho, g in groupby(sorted(chain(*[mm_tag_artigo[tag] for tag in x.neighbors]), key = str)) if artigo_vizinho != x])