return dictionary keys with the same list values

Question:

I have a dictionary like this:

example_dict = {'list_1': [1, 2, 'x'], 'list_2':[1, 3, 'x'], 'list_3' : [1, 2, 'x'], 'list_4': [1, 2, 'd'], 'list_5': [1, 3, 'x'] }

and need to return lists (or some other form) of keys that have the same values (lists) without knowing these values. The result should look something like this:

[['list_1', 'list_3'], ['list_2','list_5']]
Asked By: Marketa

||

Answers:

You can convert values to tuples and use them as a key in temporary dictionary:

Try:

example_dict = {
    "list_1": [1, 2, "x"],
    "list_2": [1, 3, "x"],
    "list_3": [1, 2, "x"],
    "list_4": [1, 2, "d"],
    "list_5": [1, 3, "x"],
}

out = {}
for k, v in example_dict.items():
    out.setdefault(tuple(v), []).append(k)

print(list(v for v in out.values() if len(v) > 1))

Prints:

[['list_1', 'list_3'], ['list_2', 'list_5']]
Answered By: Andrej Kesely
example_dict = {'list_1': [1, 2, 'x'], 'list_2':[1, 3, 'x'], 'list_3' : [1, 2, 'x'], 'list_4': [1, 2, 'd'], 'list_5': [1, 3, 'x'] }

keys = []
for k, v in example_dict.items():
    l = []
    if list(example_dict.values()).count(v) > 1:
        for k_, v_ in example_dict.items():
            if v == v_ and k_ not in l:
                l.append(k_)
    if l not in keys and len(l) > 1:
        keys.append(l)

I am sure that better and shorter way like above exists. But probably it would be more understandable for beginners like us 🙂

Answered By: 555Russich
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.