python - 从 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
,但我不知道如何实现它。谢谢!
解决方案
你可以这样做:
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]]