从输出字典中获取具有相同值的键列表的更好方法

问题描述 投票:0回答:1

我正在尝试从具有相同值的 python 字典中获取所有键。作为其中的一部分,我做了以下尝试并且它有效。但检查是否有更简洁的方法来做到这一点。 我已经完成了线程在Python字典中查找具有相同值的所有键

b = {'a1': ['b1', 'b2', 'b3'],
     'a2': ['b1', 'b2', 'b3'],
     'a3': ['b4', 'b5', 'b6'],
     'a4': ['b4', 'b5', 'b6']
     }
c = []
for i in b.values():
    if i not in c:
        c.append(i)

f = list()
for i in c:
    print(i)
    e = [k for k, v in b.items() if v == i]
    print(e)
    f.append((i, e))
print(f)

输出为:

[(['a1', 'a2'], ['b1', 'b2', 'b3']), (['a3', 'a4'], ['b4', 'b5', 'b6'])]

python-3.x
1个回答
0
投票

假设字典的所有值都是picklable,您可以使用pickled值作为键来创建一个反向映射,映射到具有相同值的键列表:

import pickle

dupes = {}
for key, value in b.items():
    dupes.setdefault(pickle.dumps(value), []).append(key)
print([(keys, pickle.loads(value)) for value, keys in dupes.items()])

输出:

[(['a1', 'a2'], ['b1', 'b2', 'b3']), (['a3', 'a4'], ['b4', 'b5', 'b6'])]

演示这里

© www.soinside.com 2019 - 2024. All rights reserved.