fork download
  1. from itertools import chain, groupby
  2. import collections
  3.  
  4. k = 1
  5. class artigo:
  6. def __init__(self, neighbors = None):
  7. global k
  8. if neighbors == None:
  9. neighbors = []
  10. self.neighbors = neighbors
  11. self.name = "artigo {}".format(k)
  12. k += 1
  13.  
  14. artigo1 = artigo(['a', 'b', 'c'])
  15. artigo2 = artigo(['a', 'd', 'f'])
  16. artigo3 = artigo(['z', 'd', 'f'])
  17.  
  18. artigos = (artigo1, artigo2, artigo3)
  19.  
  20. # Montando o multimapa que liga tags a artigos
  21. mm_tag_artigo = collections.defaultdict(list)
  22.  
  23. for artigo, tag in [(artigo, tag) for artigo in artigos for tag in artigo.neighbors]:
  24. mm_tag_artigo[tag].append(artigo)
  25.  
  26. for x in artigos:
  27. print("artigo {} tem como vizinhos...".format(x.name))
  28. 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])
Success #stdin #stdout 0.04s 9368KB
stdin
Standard input is empty
stdout
artigo artigo 1 tem como vizinhos...
['artigo 2']
artigo artigo 2 tem como vizinhos...
['artigo 1', 'artigo 3']
artigo artigo 3 tem como vizinhos...
['artigo 2']