【问题标题】:Python finding pairs, same valuesPython查找对,相同的值
【发布时间】:2018-11-29 23:35:12
【问题描述】:

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

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

我想要做的是将它安排到一个新字典中,其中包含集合和这些集合内部的键对。示例:

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

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

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

【问题讨论】:

    标签: python dictionary combinations


    【解决方案1】:

    可以用一行来解决。 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')}
    

    【讨论】:

    • 嗯.. What i am trying to do is arrange this into a new dictionary.. 还是我看错了?
    • @jpp 好吧,OP 的示例输出是一个集合。所以我有点困惑。
    • 次要改进/pythonicism,您可以使用d 而不是d.keys(),因为迭代d.keys()d 通常是等效的。
    • @jpp 确实,虽然我通常更喜欢.keys,因为(我相信)性能损失可以忽略不计(如果有的话),并且在我看来它提高了可读性。跨度>
    • 谢谢 :) 我试图用这么多的 for 和 if 组合来解决这个问题,但解决方案非常优雅。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-07-30
    • 2017-07-24
    • 2022-01-16
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多