“压缩”矩阵的 Pythonic 方式

埃吉迪奥·帕切科

如果我有以下矩阵,其输入格式是列表列表:

0 1 0
0 1 1
0 2 1
1 2 0

如何构造以下python矩阵:

       0     1
D = [[{1}, {1,2}],  0
     [{2}, {}]]     1

在 D 的元素中,将 (B,E) 对与其各自的 T 合并。 示例:(0,1) 在上述矩阵中,有 T = 1 和 T = 2,因此在 D 矩阵中它应该是一个集合 { 1,2}。由于没有 (1,1) 对,它应该是一个空集 {}。

怎么能以“pythonic”的方式做到这一点?

Ajax1234

您可以使用collections.defaultdict

from collections import defaultdict
m = [[0, 1, 0], [0, 1, 1], [0, 2, 1], [1, 2, 0]]
d = defaultdict(dict)
for b, t, e in m:
   d[b][e] = [t] if e not in d[b] else [*d[b][e], t]

l = {i for b in d.values() for i in b}
result = [[set(k.get(j, [])) for j in l] for k in d.values()]
print(result)

输出:

[[{1}, {1, 2}], 
 [{2}, set()]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章