<p>你的术语令人困惑:你在<code>a</code>中拥有的是一个<em>列表</em>而不是一个<em>元组列表</em>。但是,这与下面提供的解决方案无关。你知道吗</p>
<p>另外,请注意这里不涉及属性。我们访问<em>列表元素</em>。你知道吗</p>
<p>处理问题(分组键和唯一键)的经典Python方法是使用<code>collections.defaultdict</code>:</p>
<p><strong>设置</strong></p>
<pre><code>a = []
a.append(['data1','data2','data3','data4'])
a.append(['data21','data22','data3','data24'])
a.append(['data31','data32','data4','data34'])
</code></pre>
<p><strong>解决方案</strong></p>
<pre><code>from collections import defaultdict
d = defaultdict(list)
for item in a:
d[item[2]].append(item)
</code></pre>
<p><strong>结果</strong></p>
<pre><code>defaultdict(list,
{'data3': [['data1', 'data2', 'data3', 'data4'],
['data21', 'data22', 'data3', 'data24']],
'data4': [['data31', 'data32', 'data4', 'data34']]})
</code></pre>
<p><strong>解释</strong></p>
<ul>
<li>初始化列表的默认词典。你知道吗</li>
<li>迭代列表。你知道吗</li>
<li>将项附加到由第3个元素确定的键。你知道吗</li>
</ul>
<hr/>
<p>您的排序列表格式可以通过<code>sorted</code>:</p>
<pre><code>from operator import itemgetter
from itertools import chain
sorter = map(itemgetter(1), sorted(d.items()))
res = list(chain.from_iterable(sorter)))
[['data1', 'data2', 'data3', 'data4'],
['data21', 'data22', 'data3', 'data24'],
['data31', 'data32', 'data4', 'data34']]
</code></pre>
<p><code>sorter</code>对字典中的项进行排序,就像它们是键值元组一样(因此,由于键是唯一的,所以按键排序)。<code>itemgetter(1)</code>提取结果的第二个元素,即值。你知道吗</p>
<p><code>chain.from_iterable</code>用于有效地展平嵌套列表。你知道吗</p>