如何提取值的公共元素(这是列表)的字典和映射回他们的键作为他们的新值?



我有一本字典:

dict = {'A':[1,2,5],'B':[3,6,13],'C':[2,3,6],'D':[4,6,8]}

我想将所有的公共元素作为键提取到一个新的字典中,其对应的值作为从中提取它们的dict中的键。我想要的是:

newdict = {1:['A'],2:['A','C'],3:['B','C'],4:['D'],5:['A'],6:['B','C','D'],8:['D'],13:['B']}.

我试图通过复制字典dict来比较每个元素的值,并比较每个元素(dict1dict的副本):

for i, j in zip(range(len(dict)), range(len(dict1))):
for m, n in zip(range(len(dict[i])), range(len(dict1[j]))):
if dict[i][m] == dict1[j][n]:
print(dict[i][m])

for i in range(len(dict)):
for k in range(len(dict[i])):
#print(dict[i][k])
for j in range(dict[i+1][k], len(g)):
#print(j)
if dict[i][k] == dict[i+1][j]:
print(dict[i][k]) 

但是,我最终得到了索引超出范围错误,或者甚至在能够提取常见重复值之前无法获得适当的键。有人知道怎么做吗?

使用defaultdict(减少臃肿的代码)的简单解决方案

from collections import defaultdict
d2 = defaultdict(list)
for k,v in d.items():
for number in v:
d2[number].append(k)

>>> print(d2)
defaultdict(list,
{1: ['A'],
2: ['A', 'C'],
3: ['B', 'C'],
4: ['D'],
5: ['A'],
6: ['B', 'C', 'D'],
8: ['D'],
13: ['B']})

你也可以使用普通的字典,只是要添加一些检查:

d2 = {}
for k,v in d.items():
for number in v:
if number in d2:
d2[number].append(k)
else:
d2[number] = [k]

最后,避免将字典命名为dict,因为它会覆盖内置的dict名称。

相关内容

  • 没有找到相关文章

最新更新