在python Dictionaries或Dataframes中查找共现

时间:2015-11-15 22:52:46

标签: python dictionary pandas

我有两个字典(如果需要可以很容易地转换为数据帧),我想在其中找到名称的共现(朋友)。第一个字典包含名称之间的关系。

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 :
        ....

但它不起作用,需要花费大量时间才能给出结果。有什么建议吗?

谢谢

1 个答案:

答案 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: