Python查找对,相同的值

时间:2018-11-29 23:35:13

标签: python dictionary combinations

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

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

我想做的是将其安排到一个新字典中,该字典包含集合以及这些集合中的密钥对。示例:

{("first", "second"),("first", "third"), ("first", "fourth"), ("second", "fifth")}

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

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

1 个答案:

答案 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')}