这对其他人来说可能是一个简单的问题,但现在对我来说却很困难。我有这本词典:

{
  "first": {"a", "b"},
  "second": {"a", "c"},
  "third": {"b"},
  "fourth": {"b"},
  "fifth": {"c"},
}

我想要做的是将其安排到一个新字典中,该字典包含集合和这些集合中的键对。例子:
{("first", "second"),("first", "third"), ("first", "fourth"), ("second", "fifth")}

第一对将是第一和第二,因为两者都有“a”,第二对将是第一和第三,因为它们都包含“b”等等......

我的想法是取第一个键并将其与其余键进行比较并将结果存储在集合中,执行下一个......但我似乎无法理解逻辑。你们对我应该做什么有任何提示吗?

最佳答案

单行即可解决。 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')}

关于Python 查找对,相同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53549150/

10-12 21:08