擅长:python、mysql、java
<pre><code>In [278]: a = [(1, "alpha"), (2, 3)]
...: b = [(1, "zylo"), (1, "xen"), (2, "potato")]
In [279]: a
Out[279]: [(1, 'alpha'), (2, 3)]
In [280]: b
Out[280]: [(1, 'zylo'), (1, 'xen'), (2, 'potato')]
</code></pre>
<p>请注意,如果我尝试从<code>a</code>生成一个数组,我会得到完全不同的结果</p>
<pre><code>In [281]: np.array(a)
Out[281]:
array([['1', 'alpha'],
['2', '3']], dtype='<U21')
In [282]: _.shape
Out[282]: (2, 2)
</code></pre>
<p><code>defaultdict</code>是收集类似键控值的便捷工具</p>
<pre><code>In [283]: from collections import defaultdict
In [284]: dd = defaultdict(list)
In [285]: for tup in a+b:
...: k,v = tup
...: dd[k].append(v)
...:
In [286]: dd
Out[286]: defaultdict(list, {1: ['alpha', 'zylo', 'xen'], 2: [3, 'potato']})
</code></pre>
<p>它可以转换为元组列表,具有:</p>
<pre><code>In [288]: [(k,*v) for k,v in dd.items()]
Out[288]: [(1, 'alpha', 'zylo', 'xen'), (2, 3, 'potato')]
</code></pre>
<p>我使用<code>a+b</code>加入列表,因为元组出现在哪里显然无关紧要</p>
<p><code>Out[288]</code>甚至是一个糟糕的<code>numpy</code>匹配,因为元组的大小不同,并且项目(第一个项目除外)可能是字符串或数字</p>