首页 > 解决方案 > 从 Python 中的字典键、值创建共现矩阵

问题描述

我正在尝试从具有重叠值的唯一键字典中创建一个共现矩阵(在 Python 3 中)。这是我的数据结构:

keys = ['A','B','C','D']
vals = [[1,2],1,[1,3],2]

dict = {'A':[1,2], 'B':1, 'C':[1,3], 'D':2]}

如何创建矩阵来计算表单中每个键的值的出现次数:?

   1.  2.  3. 
A. 1   1   0 
B. 1   0   0 
C. 1   0   1 
D. 0   1   0 

我被推荐使用defaultdict,但我不知道如何实现它。谢谢!

标签: pythonmatrixcounterdefaultdictfind-occurrences

解决方案


你可以这样做:

d = {'A': [1, 2], 'B': [1], 'C': [1, 3], 'D': [2]}

values = sorted(set(e for v in d.values() for e in v))

result = {k : [1 if value in v else 0 for value in values] for k, v in d.items()}

print(result)

输出

{'A': [1, 1, 0], 'B': [1, 0, 0], 'C': [1, 0, 1], 'D': [0, 1, 0]}

如果有很多值,您可以使用集合进行包含测试,如下所示:

d = {'A': [1, 2], 'B': [1], 'C': [1, 3], 'D': [2]}
d = { k : set(v) for k, v in d.items() }

@Ev 建议的更简洁的方法。Kounis要做的是:

result = {k : [int(value in v) for value in values] for k, v in d.items()}

最后,如果您对列表数据结构列表(即矩阵)感兴趣,您可以将结果的值放入列表中:

print(list(result.values()))

输出

[[1, 1, 0], [1, 0, 0], [1, 0, 1], [0, 1, 0]]

推荐阅读