擅长:python、mysql、java
<p><strong>更新</strong>:添加按长度排序。你知道吗</p>
<p>我们可以使用高级索引来创建按项目和标签索引的网格。
然后我们可以在列上迭代并使用<code>flatnonzero</code>来获得项目id:</p>
<pre><code>>>> ex = [[1, 2, 3],
... [1, 0, 0],
... [1, 3, 0]]
>>>
>>> m = len(ex)
>>> n = np.max(ex) + 1
>>> grid = np.zeros((m, n), int) # could also use a smaller dtype here
>>> grid[np.arange(m)[:, None], ex] = 1
>>> grid
array([[0, 1, 1, 1],
[1, 1, 0, 0],
[1, 1, 0, 1]])
>>> idx = np.argsort(np.count_nonzero(grid, 0))[::-1]
>>> dict(zip(idx, map(np.flatnonzero, grid.T[idx])))
{1: array([0, 1, 2]), 3: array([0, 2]), 0: array([1, 2]), 2: array([0])}
</code></pre>
<p>请注意,字典记住键的插入顺序。这是3.6中的一个实现细节,但将是3.7中的一个保证特性。你知道吗</p>