Skip to content Skip to sidebar Skip to footer

Find All Unique Pairs Of Keys Of A Dictionary

If there's a dictionary: test_dict = { 'a':1,'b':2,'c':3,'d':4} I want to find pairs of keys in list of tuples like: [('a','b'),('a','c'),('a','d'),('b','c'),('b','d'),('c','d

Solution 1:

Sounds like a job for itertools.

from itertools importcombinationstest_dict= {'a':1, 'b':2, 'c':3, 'd':4}
results = list(combinations(test_dict, 2))

[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

I should add that although the output above happens to be sorted, this is not guaranteed. If order is important, you can instead use:

results = sorted(combinations(test_dict, 2))

Solution 2:

Since dictionary keys are unique, this problem becomes equivalent of finding all combinations of the keys of size 2. You can just use itertools for that:

>>> test_dict = { 'a':1,'b':2,'c':3,'d':4}
>>> import itertools
>>> list(itertools.combinations(test_dict, 2))
[('c', 'a'), ('c', 'd'), ('c', 'b'), ('a', 'd'), ('a', 'b'), ('d', 'b')]

Note, these will come in no particular order, since dict objects are inherently unordered. But you can sort before or after, if you want sorted order:

>>> list(itertools.combinations(sorted(test_dict), 2))
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
>>>

Note, this algorithm is relatively simple if you are working with sequences like a list:

>>>ks = list(test_dict)>>>for i, a inenumerate(ks):...for b in ks[i+1:]: # this is the important bit...print(a, b)...
c a
c d
c b
a d
a b
d b

Or more succinctly:

>>> [(a,b) for i, a in enumerate(ks) for b in ks[i+1:]]
[('c', 'a'), ('c', 'd'), ('c', 'b'), ('a', 'd'), ('a', 'b'), ('d', 'b')]
>>>

Solution 3:

itertools.combinations does just what you want:

from itertools import combinations

test_dict = { 'a':1,'b':2,'c':3,'d':4}
keys = tuple(test_dict)
combs = list(combinations(keys, 2))
print(combs)
# [('a', 'd'), ('a', 'b'), ('a', 'c'), ('d', 'b'), ('d', 'c'), ('b', 'c')]

combs = list(combinations(test_dict, 2)) would just do; iterating over a dictionary is just iterating over its keys...

Post a Comment for "Find All Unique Pairs Of Keys Of A Dictionary"