【问题标题】:How to convert list of object to sparse matrix in python?如何在python中将对象列表转换为稀疏矩阵?
【发布时间】:2021-10-05 00:07:39
【问题描述】:

我有对象列表,我想在 python 中将其转换为稀疏矩阵。

我希望矩阵列是标签,行是标题 (不同标题之间可能有重复标签)

我不知道该怎么办?

data = [
  {
    'title': 'title1', 'tags': ['tag1', 'tag2', 'tag3']
  },
  {
    'title': 'title2', 'tags': ['tag1']
  }
]

我想要这样的东西:

【问题讨论】:

  • 有多少个标签?你事先知道吗?你在用熊猫吗?如果不是,为什么不呢? numpy 呢?

标签: python python-3.x list matrix sna


【解决方案1】:

对于0/1 矩阵,您可以使用下一个示例:

data = [
    {"title": "title1", "tags": ["tag1", "tag2", "tag3"]},
    {"title": "title2", "tags": ["tag1"]},
]

# using sorted for having tag1 first, tag3 last:
tags = sorted({t for d in data for t in d["tags"]})

matrix = [[int(tt in d["tags"]) for tt in tags] for d in data]
print(matrix)

打印:

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

为了“漂亮”打印矩阵:

data = [
    {"title": "title1", "tags": ["tag1", "tag2", "tag3"]},
    {"title": "title2", "tags": ["tag1"]},
]

tags = sorted({t for d in data for t in d["tags"]})

print(("{:<10}" * (len(tags) + 1)).format("", *tags))
for d in data:
    print(
        ("{:<10}" * (len(tags) + 1)).format(
            d["title"], *[int(tt in d["tags"]) for tt in tags]
        )
    )

打印:

          tag1      tag2      tag3      
title1    1         1         1         
title2    1         0         0         

【讨论】:

  • 谢谢,但我还有一个问题,我无法转置这个矩阵。你能帮我怎么办吗? matrix.transpose() 不起作用
猜你喜欢
  • 2023-04-10
  • 2021-11-25
  • 2017-07-02
  • 2013-05-28
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
相关资源
最近更新 更多