在Python中结合使用具有相同键但值不同的2个字典

时间:2019-02-27 20:52:11

标签: python

我有这两个字典,一个代表人的身份证和他们朋友的朋友的身份证:

FOFDict = {0 : [1, 2, 3],
       1 : [2, 3, 4],
       2 : [0, 1, 3, 4],
       3 : [0, 1, 2, 5],
       4 : [1, 2, 6, 7],
       5 : [8, 3],
       6 : [9, 4, 7],
       7 : [9, 4, 6],
       8 : [5],
       9 : [6, 7]}

另一个显示基于共享兴趣(应该在代码的前面找到)的身份,他们应该成为谁的朋友:

       InterestFriendsDict = {0 : ([1, 5, 8, 9], ['C', 'Java','Data','Rainbows']),
       1 : ([0], ['C']),
       2 : ([3, 5], ['Python']),
       3 : ([2, 4, 5, 6], ['Python','ramen','R','stats','prob']),
       4 : ([3, 7], ['ramen','AI']),
       5 : ([0, 2, 3, 8], ['Java', 'Python', 'R']),
       6 : ([3], ['stats', 'prob']),
       7 : ([4, 8], ['AI', 'anatomy']),
       8 : ([0, 7, 9], ['Data', 'anatomy']),
       9 : ([0, 5, 8], ['Java', 'Data', 'Rainbows'])}

我现在必须以显示密钥ID的方式组合这些词典,然后是他们的朋友的朋友和应该与之成为朋友的朋友,然后是所有人的共同利益。例如,id为0和1的条目为:

{0: ([1, 2, 3, 5, 8, 9], ['C', 'Java', 'Data', 'Rainbows'],
{1: ([0, 2, 3, 4], ['C']),
...

我正在努力确定从何处开始。我以为我可以只使用.update之类的东西,但是我不确定,因为其中一个字典有一个元组,而另一个字典没有。如果您可以提供帮助,请不要使用defaultdict之类的方法进行响应,我是一名学生,我正在尝试学习如何做到这一点。谢谢!

1 个答案:

答案 0 :(得分:3)

尝试将问题分解成小块,然后将它们粘在一起。这是解决问题的一种简单方法:

new_dict = {}
# iterate over dictionary by calling items()
for key, val in InterestFriendsDict.items():
    # unpack the tuple you have with 2 variables just like the size of the tuple
    id_tup, interests = val
    new_dict[key] = (list(set(FOFDict[key] + id_tup)), interests)

有两点需要注意,set具有唯一的值,因此可以快速处理重复。然后将其转换回list并与兴趣一起放入元组中。