In [1]:
from itertools import combinations

In [4]:
def get_directed_triads(undirected_triad):
    # Get all triplets of edges
    for candidate_edges in combinations(undirected_triad.items(), 3):
        # Get edges between unique pair of nodes
        unique_edges = set([tuple(sorted(k)) for k,v in candidate_edges])
        # Only consider triad in which the tree edges use a unique pair of nodes
        if len(unique_edges) == 3:
            yield dict(candidate_edges)

In [5]:
undirected_triad = {
    ('lisa.jacobson@enron.com', 'phillip.allen@enron.com'):1, 
    ('lisa.jacobson@enron.com', 'richard.shapiro@enron.com'):1,
    ('phillip.allen@enron.com', 'richard.shapiro@enron.com'):1,
    ('richard.shapiro@enron.com', 'phillip.allen@enron.com'):-1
}

In [6]:
for directed_triad in get_directed_triads(undirected_triad):
    print(directed_triad)


{('lisa.jacobson@enron.com', 'phillip.allen@enron.com'): 1, ('lisa.jacobson@enron.com', 'richard.shapiro@enron.com'): 1, ('phillip.allen@enron.com', 'richard.shapiro@enron.com'): 1}
{('lisa.jacobson@enron.com', 'phillip.allen@enron.com'): 1, ('lisa.jacobson@enron.com', 'richard.shapiro@enron.com'): 1, ('richard.shapiro@enron.com', 'phillip.allen@enron.com'): -1}

In [7]:
all_directed_triads = list(get_directed_triads(undirected_triad))
all_directed_triads


Out[7]:
[{('lisa.jacobson@enron.com', 'phillip.allen@enron.com'): 1,
  ('lisa.jacobson@enron.com', 'richard.shapiro@enron.com'): 1,
  ('phillip.allen@enron.com', 'richard.shapiro@enron.com'): 1},
 {('lisa.jacobson@enron.com', 'phillip.allen@enron.com'): 1,
  ('lisa.jacobson@enron.com', 'richard.shapiro@enron.com'): 1,
  ('richard.shapiro@enron.com', 'phillip.allen@enron.com'): -1}]

In [ ]: