擅长:python、mysql、java
<p>基本上你需要为你的2个值创建一个元组键,并用它创建一个默认字典。你知道吗</p>
<p>为每个键扩展列表的其余部分,并通过向值中添加键(as list)将键/值耦合转换回列表列表</p>
<p>像这样:</p>
<pre><code>import collections
some_list = [('A','B','IP1','N1'),('A','B','IP3','N3'),('B','C','IP2','N2'),('B','C','IP3','N3'),('D','F','IP4','N4')]
c = collections.defaultdict(list)
for k1,k2,*b in some_list: # extended iterable unpacking allows this
c[(k1,k2)].extend(b) # add to existing list or create a new one
result = [a+tuple(b) for a,b in c.items()]
</code></pre>
<p>结果:</p>
<pre><code>>>> result
[('D', 'F', 'IP4', 'N4'),
('B', 'C', 'IP2', 'N2', 'IP3', 'N3'),
('A', 'B', 'IP1', 'N1', 'IP3', 'N3')]
</code></pre>
<p><code>for k1,k2,*b in some_list</code>部分允许将前两个值放在单独的<code>k1</code>和<code>k2</code>变量中,并将“rest”放在<code>b</code>列表中。此功能在Python2中不可用。Python 2用户可以用更基本的</p>
<pre><code>for a in some_list:
c[tuple(a[:2])].extend(a[2:]) # add to existing list or create a new one
</code></pre>
<p>(这个问题类似于:<a href="https://stackoverflow.com/questions/52454582/merge-tuples-with-the-same-key">Merge tuples with the same key</a>对于核心部分,但是前后处理使它不同)</p>