擅长:python、mysql、java
<p>由于每个元组中的第一个元素是字符串,因此Python正在执行lexographic排序,其中所有以<code>'1'</code>开头的字符串都在以<code>'2'</code>开头的字符串之前。在</p>
<p>为了获得所需的排序,您需要将第一个条目<em>视为<code>float</code></em>而不是字符串。在</p>
<p>我们可以将<code>sorted</code>与自定义排序函数一起使用,该函数在排序之前将第一个条目转换为浮点。它还保留了第二个元组元素,以处理第一个条目可能不唯一的情况。在</p>
<pre><code>result = sorted(L, key = lambda x: (float(x[0].split()[0]), x[1]))
# [('1', 'blaabal'), ('1.2', 'bbalab'), ('2.1', 'baala'), ('3', 'yuio'), ('4', 'poku'), ('5.2', 'qsdfg'), ('10', 'ejej'), ('11.1', 'aaua'), ('12.1', 'ehjej'), ('12.2 (c)', 'ekeke'), ('12.2 (d)', 'qwerty')]
</code></pre>
<p>我必须添加一个<code>x[0].split()[0]</code>,这样我们就可以在空间中拆分第一个元组元素,并且只获取前几部分,因为有些元素的值是<code>'12.2 (d)'</code>,而我们只需要<code>'12.2'</code>。在</p>
<p>把第一个元素的剩余部分转换成第一个元素,然后把它转换成第一个元素。在</p>
^{pr2}$