Python:我想阅读数据集
(category, value): (0, 1) (0, 2) (1, 3) (1, 4)
到数组
[[1, 2],[3, 4]]
由于类别的最大数目未知,我想使用“append”方法动态创建2D数组。
我写了一个示例代码:
data = []
data.append([])
data[0].append(1)
data[0].append(2)
try:
print (data[1])
except IndexError:
data.append([])
finally:
data[1].append(3)
data[1].append(4)
print(data)
但是,我知道代码非常难看,因为我使用“print”来检查对data[1]
的访问权限。
这个问题还有更好的解决方案吗?
答案 0 :(得分:2)
您可以使用list comprehension与iter
一起轻松完成此操作。
>>> l = [(0, 1), (0, 2), (1, 3), (1, 4)]
>>> i = iter(l)
>>> [[x[1],y[1]] for x,y in zip(i,i)]
[[1, 2], [3, 4]]
这里的算法是迭代遍历元组列表。这是iter
使用的地方。 iter
创建一个由zip
函数使用的迭代器。然后我们将元组读入列表理解并仅添加所需的两个数字,这是第二个索引。
有关这些内容的详细信息,请参阅What does "list comprehension" mean? How does it work and how can I use it?。
答案 1 :(得分:1)
使用itertools.groupby
:
import itertools
a = [(0, 1), (0, 2), (1, 3), (1, 4)]
g = itertools.groupby(a, key=lambda x: x[0])
g = [list(i[1]) for i in g]