如何将 object 的列表转换为 python 中的稀疏矩阵?
How to convert list of object to sparse matrix in python?
我有 objects 的列表,我想将其转换为 python 中的稀疏矩阵。
我希望矩阵列是标签,行是标题
(不同标题之间可能有重复标签)
不知道该怎么办?
data = [
{
'title': 'title1', 'tags': ['tag1', 'tag2', 'tag3']
},
{
'title': 'title2', 'tags': ['tag1']
}
]
我想要这样的东西:
对于 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
我有 objects 的列表,我想将其转换为 python 中的稀疏矩阵。
我希望矩阵列是标签,行是标题 (不同标题之间可能有重复标签)
不知道该怎么办?
data = [
{
'title': 'title1', 'tags': ['tag1', 'tag2', 'tag3']
},
{
'title': 'title2', 'tags': ['tag1']
}
]
我想要这样的东西:
对于 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