Dictionary 识别两个列表或字典中重复项的最佳方法?

Dictionary 识别两个列表或字典中重复项的最佳方法?,dictionary,python-3.7,Dictionary,Python 3.7,假设您有两个列表,例如: list1 = [-2, -1, 0, 1, 2, 3] list2 = [4, 1, 0, 1, 4, 9] …并将这两个列表压缩到字典中以生成: dict1 = {-2: 4, -1: 1, 0: 0, 1: 1, 2: 4, 3: 9} …其中列表1是键,列表2是值 您会注意到列表2中的一些元素是重复的,例如4和1。它们在列表2中出现了两次,并因此出现在

假设您有两个列表,例如:

list1 = [-2, -1, 0, 1, 2, 3]
list2 = [4, 1, 0, 1, 4, 9]
…并将这两个列表压缩到字典中以生成:

dict1 = {-2: 4, 
         -1: 1, 
          0: 0, 
          1: 1, 
          2: 4, 
          3: 9}
…其中列表1是键,列表2是值

您会注意到列表2中的一些元素是重复的,例如4和1。它们在列表2中出现了两次,并因此出现在字典中

-2 corresponds to 4
 2 corresponds to 4
-1 corresponds to 1
 1 corresponds to 1
我试图找到一种方法使用列表或字典来识别列表2中的重复项,并从列表1返回它们的键

因此,我希望上面两个列表中的返回值是:

(-2, 2) #From list 1 since they both correspond to 4 in list2
(-1, 1) #from list 1 since they both correspond to 1 in list2
在本例中,list2恰好是list1的平方。但情况并非总是如此

所以最终,我要寻找的是一种基于重复值返回这些键的方法

你对如何处理这个问题有什么想法吗?我能够识别列表2中的重复项,但我完全无法识别列表1中对应的值。

在python3中:

from itertools import groupby
list1 = [-2, -1, 0, 1, 2, 3]
list2 = [4, 1, 0, 1, 4, 9]
pairs = zip(list2, list1)
ordered = sorted(pairs, key=lambda x: x[0])
groups = ((k, list(g)) for k,g in groupby(ordered, key=lambda x: x[0])) # generator
duplicates = (k for k in groups if len(k[1])>1) # generator
for k,v in duplicates :
    print(str(k) + " : " + str(list(v)))
结果:

1 : [(1, -1), (1, 1)]
4 : [(4, -2), (4, 2)]
4: -2,2
1: -1,1
奖金:在功能c#中:

结果:

1 : [(1, -1), (1, 1)]
4 : [(4, -2), (4, 2)]
4: -2,2
1: -1,1

你能重新构思这个问题吗。我重新思考了这个问题,如果它让人困惑的话,很抱歉!您得到了重复项(groupby,其中count>1,select或yield)。对于列表2中的每个副本,您都可以生成所有相应的键。@Soleil列表2中的groupby是我的吗?这将如何产生清单1中的值?