使用一对键创建值的并集

时间:2019-02-14 22:44:32

标签: python python-3.x

我正在研究社交媒体共同朋友问题,我选择使用词典来表示他们。我陷入了这样的局面:您让一对用户说a和b并创建一个包含其朋友列表的并集的集合,例如 ab-> [{b,c,d,e},{c,d,a}]

注意:下面的代码显示有一个用户,他有一些朋友,这些朋友存储在字典中。

现在,我想将每个用户与他们的朋友列表中的每个其他用户配对,并创建一个集合列表,其中将包含两个用户的朋友列表。

users = {
    'a': ['b', 'c', 'd', 'e'],
    'b': ['c', 'd', 'a'],
    'c': ['a', 'b'],
    'd': ['a','b','e'],
    'e': ['a','d']
}

1 个答案:

答案 0 :(得分:0)

您可以将列表的字典转换为集合的字典,以便可以对itertools.combinations返回的两个用户的每个组合使用集合交集,以找到他们的共同朋友,并形成索引的集合的字典用户对的冻结集:

from itertools import combinations
u = {k: set(l) for k, l in users.items()}
{frozenset((a, b)): u[a] & u[b] for a, b in combinations(u, 2)}

这将返回:

{frozenset({'b', 'a'}): {'c', 'd'},
 frozenset({'a', 'c'}): {'b'},
 frozenset({'a', 'd'}): {'b', 'e'},
 frozenset({'a', 'e'}): {'d'},
 frozenset({'b', 'c'}): {'a'},
 frozenset({'b', 'd'}): {'a'},
 frozenset({'b', 'e'}): {'a', 'd'},
 frozenset({'c', 'd'}): {'b', 'a'},
 frozenset({'c', 'e'}): {'a'},
 frozenset({'e', 'd'}): {'a'}}