这对其他人来说可能是一个简单的问题,但现在对我来说很困难。我有这本字典:
{
"first": {"a", "b"},
"second": {"a", "c"},
"third": {"b"},
"fourth": {"b"},
"fifth": {"c"},
}
我想做的是将其安排到一个新字典中,该字典包含集合以及这些集合中的密钥对。示例:
{("first", "second"),("first", "third"), ("first", "fourth"), ("second", "fifth")}
第一对将是第一和第二,因为两者都具有“ a”,第二对将是第一和第三,因为它们都包含“ b”,依此类推...
我的想法是拿第一个键并将其与其余键进行比较,然后将结果存储在集合中,再执行下一个...但是我似乎无法理解逻辑。你们对我应该做什么有任何提示吗?
答案 0 :(得分:9)
单行即可解决。 combinations(d.keys(), 2)
创建了密钥对,然后我们使用集合理解来保留其值具有非空交集的密钥对。
from itertools import combinations
d = {
"first": {"a", "b"},
"second": {"a", "c"},
"third": {"b"},
"fourth": {"b"},
"fifth": {"c"},
}
print({(key1, key2) for key1, key2 in combinations(d.keys(), 2) if d[key1] & d[key2]})
# {('first', 'third'), ('third', 'fourth'), ('second', 'fifth'),
# ('first', 'fourth'), ('first', 'second')}