itertools.combinations, , , C ( , O(n**2) ), if person1['pid'] >= person2['pid']: continue ( combinations).
from itertools import combinations
for person1, person2 in combinations(personlist, 2):
print(person1['fname'], person2['fname'])
:
('john', 'john')
('john', 'bob')
('john', 'bob')
, fancymatching , (O(n) runtime) . , 'fname' -.
>>> matches = {}
>>> for person in personlist:
... matches.setdefault(person['fname'], []).append(person)
>>> matches
{'bob': [{'fname': 'bob', 'lname': 'nope', 'mname': 'b', 'pid': '3'}],
'john': [{'fname': 'john', 'lname': 'smyth', 'mname': 'a', 'pid': '1'},
{'fname': 'john', 'lname': 'smith', 'mnane': 'a', 'pid': '2'}]}
, fancymatching ββ. , , , .