我有两个字典(如果需要可以很容易地转换为数据帧),我想在其中找到名称的共现(朋友)。第一个字典包含名称之间的关系。
my_dict:
{'George': ['Bill','Mary'],
'Bill': ['George'],
'Sam' : [],
....}
另一个字典包含一起出去的人的列表
my_dict2:
{1: 'Mary,George,Sandra,Alice',
2: 'Bob,Bill,Sam,George',
3: 'Simon,Frank',
....}
我想找到一起出去的朋友的列表/词典/数据框。所以预期的输出是:
Mary,George
Bill,George
..
我试过这个
for key, my_dict_values in my_dict.items():
for my_dict2_values in my_dict2.values():
if key == my_dict2_values and my_dict_values == my_dict2_values :
....
但它不起作用,需要花费大量时间才能给出结果。有什么建议吗?
谢谢
答案 0 :(得分:1)
此代码非常慢(O(n^3)
),因此请考虑优化数据结构,以确定您是否可以改善访问友情详情的方式。
d1 = {'George': ['Bill','Mary'],
'Bill': ['George'],
'Sam' : [],
}
d2 = {1: 'Mary,George,Sandra,Alice',
2: 'Bob,Bill,Sam,George',
3: 'Simon,Frank',
}
out = []
for p1, friends in d1.items():
for friend in friends:
for party in d2.values():
if p1 in party and friend in party:
out.append([p1,friend])
print out
给出:
[['Bill', 'George'], ['George', 'Bill'], ['George', 'Mary']]
其次,尝试编写实际描述您正在做的事情的代码,因为它使得理解起来更容易。例如,考虑:
for key, my_dict_values in my_dict.items():
for my_dict2_values in my_dict2.values():
if key == my_dict2_values and my_dict_values == my_dict2_values :
与:相比:
for p1, friends in d1.items():
for friend in friends:
for party in d2.values():
if p1 in party and friend in party: