Python 对保留相同数字顺序的列表进行反向排序

Python 对保留相同数字顺序的列表进行反向排序,python,list,sorting,Python,List,Sorting,我有一张这样的清单 lst = ['3.0', '3.0 (key)', '2.0', '2.0 (key)', '1.0', '1.0 (key)', '1.1', '1.1 (key)'] 我想对它进行反向排序,这样它看起来应该仍然是相同的数字顺序,但是带有文本'(key)的项应该首先出现 ['3.0 (key)', '3.0', '2.0 (key)', '2.0', '1.0 (key)', '1.0', '1.1 (key)', '1.1'] 到目前为止,我所做的是 lst.sor

我有一张这样的清单

lst = ['3.0', '3.0 (key)', '2.0', '2.0 (key)', '1.0', '1.0 (key)', '1.1', '1.1 (key)']
我想对它进行反向排序,这样它看起来应该仍然是相同的数字顺序,但是带有文本
'(key)
的项应该首先出现

['3.0 (key)', '3.0', '2.0 (key)', '2.0', '1.0 (key)', '1.0', '1.1 (key)', '1.1']
到目前为止,我所做的是

lst.sort(reverse=True)
这将反转整个列表,忽略数字顺序 导致:

['1.1', '1.1 (key)', '1.0 (key)', '1.0', '3.0', '3.0 (key)', '2.0 (key)', '2.0']
我想要的是

['1.0', '1.0 (key)', '1.1', '1.1 (key)', '2.0', '2.0 (key)', '3.0', '3.0 (key)']

也许我遗漏了什么,但简单有什么错:

>>> lst = ['3.0', '3.0 (key)', '2.0', '2.0 (key)', '1.0', '1.0 (key)', '1.1', '1.1 (key)']
>>> sorted(lst, reverse=True)
['3.0 (key)', '3.0', '2.0 (key)', '2.0', '1.1 (key)', '1.1', '1.0 (key)', '1.0']
编辑:为了解决OP问题:构建新列表,如果需要,交换最后的项目,否则保持顺序,不需要有成对的值:

list_ = ['3.5 (key)',
         '3.0', '3.0 (key)',
         '2.5',
         '2.0', '2.0 (key)',
         '1.5 (key)',
         '1.0', '1.0 (key)',
         '1.1', '1.1 (key)',
         '0.9']

summary = []

for item in list_:
    summary.append(item)
    if 2 <= len(summary):
       if item.split()[0] == summary[-2]:
          summary.insert(-1, summary.pop(-1))

# summary
['3.5 (key)', 
 '3.0 (key)', '3.0', 
 '2.5', 
 '2.0 (key)', '2.0', 
 '1.5 (key)', 
 '1.0 (key)', '1.0', 
 '1.1 (key)', '1.1', 
 '0.9']
list_=['3.5(键)',
“3.0”、“3.0(关键)”,
'2.5',
“2.0”、“2.0(关键)”,
"1.5(关键)",,
“1.0”、“1.0(关键)”,
“1.1”、“1.1(关键)”,
'0.9']
摘要=[]
对于列表中的项目:
摘要.追加(项目)

如果我理解正确

def _first_element(elements):
    return elements[0]
# First you zip the items to groups.
groups = zip(*[iter(self._takes)]*2)
# then sort the groups in reverse
zipped.sort(key=first_element, reverse=True)
then build a new list what 
new_list=[]
for item in zipped:
    new_list.append(item[-1])
    new_list.append(item[0])

> new_list
> ['1.0', '1.0 (key)', '1.1', '1.1 (key)', '2.0', '2.0 (key)', '3.0', '3.0 (key)']

你想用奇数索引交换偶数索引,还是这只是一个坏例子?我已经修复了它,我想要的是
['3.0(键)'、'3.0'、'2.0'、'1.0(键)'、'1.0'、'1.1(键)']
抱歉地说,但出于所有目的(数字)1.1应该介于2.0和1.0之间-为什么要对所有数字进行递减排序,而将较大的1.1排序到较低的1.0之后(不管它是否有(键)?它应该如何表现?将
['2.3(键),'2.3']
添加到您的数据中?请回答我上面的问题。输入是否类似
['3.0',1.0(键)“,”1.0“,”3.0(键)“
?如果是这样,期望的结果是什么?(上次编辑数字顺序后,结果是:
['1.1','1.1(键)','1.0(键)','1.0','3.0','3.0(键)','2.0']
不是命令
lst.sort(reverse=True)
将输出的。打字错误?)这不是OP想要的。好吧,我怀疑我错过了什么。@baduker:现在应该是OP想要的东西了。