我正在研究社交媒体共同朋友问题,我选择使用词典来表示他们。我陷入了这样的局面:您让一对用户说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']
}
答案 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'}}