在python中对嵌套在列表中的日期进行排序

在python中对嵌套在列表中的日期进行排序,python,list,sorting,insertion-sort,Python,List,Sorting,Insertion Sort,所以我有一个包含其他列表的列表。这些内部列表的第一个元素是float id,第二个元素是date。我希望根据日期对该列表进行排序,但要确保该日期的相应id与其相应日期保持一致 这就是原始列表的样子 [[1.33315, '2020/07/22'],[1.33315, '2020/07/25'],[1.33315, '2020/07/27'],[1.346646, '2020/07/21'], [1.345646, '2020/07/21'],[1.345646, '2020/07/22'],[1

所以我有一个包含其他列表的列表。这些内部列表的第一个元素是float id,第二个元素是date。我希望根据日期对该列表进行排序,但要确保该日期的相应id与其相应日期保持一致

这就是原始列表的样子

[[1.33315, '2020/07/22'],[1.33315, '2020/07/25'],[1.33315, '2020/07/27'],[1.346646, '2020/07/21'], [1.345646, '2020/07/21'],[1.345646, '2020/07/22'],[1.345646, '2020/07/25']]
我想把它分类成这样

[[1.346646, '2020/07/21'],[1.345646, '2020/07/21'],[1.33315, '2020/07/22'],[1.345646, '2020/07/22'],[1.33315, '2020/07/25'],[1.345646, '2020/07/25'],[1.33315, '2020/07/27']]
我需要的排序是尽快,同时也很简单。我尝试使用插入排序,但似乎不起作用 这是代码,
dates
是保存前面提到的列表的变量

def date_sort(self, dates):
    
    for i in range(1,len(dates)):
        items_to_insert = dates[i][1]
        print(items_to_insert)
        j = i - 1 
        
        y = datetime.strptime(dates[j][1],"%Y/%m/%d")
        z = datetime.strptime(items_to_insert,"%Y/%m/%d")
        while j >= 0 and y > z:
            dates[j+1] = dates[j]
            j-=1
            break
        else:
            dates[j+1][1] = items_to_insert
        
    print(dates)
这是我得到的输出

[[1.33315, '2020/07/22'], [1.33315, '2020/07/25'], [1.33315, '2020/07/27'], [1.33315, '2020/07/27'], [1.33315, '2020/07/27'], [1.33315, '2020/07/27'], [1.33315, '2020/07/27']]
如您所见,一些值已完全更改。我不明白我错过了什么,或者有没有更好的方法来做到这一点?谢谢

单线λ

xs = [[1.33315, '2020/07/22'],[1.33315, '2020/07/25'],[1.33315, '2020/07/27'],[1.346646, '2020/07/21'], [1.345646, '2020/07/21'],[1.345646, '2020/07/22'],[1.345646, '2020/07/25']]

print(sorted(xs, key=lambda x: x[1]))

## will give you 
## [[1.346646, '2020/07/21'], [1.345646, '2020/07/21'], [1.33315, '2020/07/22'], [1.345646, '2020/07/22'], [1.33315, '2020/07/25'], [1.345646, '2020/07/25'], [1.33315, '2020/07/27']]
您可以使用返回排序列表的
sorted(iterable)
,也可以使用
list.sort()

这两个函数都采用
参数,告诉函数使用哪个参数进行排序。 在您的情况下,

# Using sorted(iterable)
>>> sorted(xs, key=lambda x: x[1])
[[1.346646, '2020/07/21'], [1.345646, '2020/07/21'], [1.33315, '2020/07/22'], [1.345646, '2020/07/22'], [1.33315, '2020/07/25'], [1.345646, '2020/07/25'], [1.33315, '2020/07/27']]

# Using list.sort()
>>> xs = [[1.33315, '2020/07/22'],[1.33315, '2020/07/25'],[1.33315, '2020/07/27'],[1.346646, '2020/07/21'], [1.345646, '2020/07/21'],[1.345646, '2020/07/22'],[1.345646, '2020/07/25']]
>>> xs.sort(key=lambda x: x[1])
>>> xs
[[1.346646, '2020/07/21'], [1.345646, '2020/07/21'], [1.33315, '2020/07/22'], [1.345646, '2020/07/22'], [1.33315, '2020/07/25'], [1.345646, '2020/07/25'], [1.33315, '2020/07/27']]


不要从头开始执行排序,使用内置的
sorted
无需使用自己的排序算法重新设计轮子,只要使用内置函数,并给它一个键:
sorted(my_list,key=lambda x:x[:-1])
应该排序
my_list
,最后一个元素(在本例中是日期)优先。由于日期是年/月/日,因此它们应该正确排序。你想要一个解决方案专门纠正你的插入排序算法,还是这就足够了?哦,非常感谢。。。我不知道你能做到……非常感谢:)……这就足够了
# Using sorted(iterable)
>>> sorted(xs, key=lambda x: x[1])
[[1.346646, '2020/07/21'], [1.345646, '2020/07/21'], [1.33315, '2020/07/22'], [1.345646, '2020/07/22'], [1.33315, '2020/07/25'], [1.345646, '2020/07/25'], [1.33315, '2020/07/27']]

# Using list.sort()
>>> xs = [[1.33315, '2020/07/22'],[1.33315, '2020/07/25'],[1.33315, '2020/07/27'],[1.346646, '2020/07/21'], [1.345646, '2020/07/21'],[1.345646, '2020/07/22'],[1.345646, '2020/07/25']]
>>> xs.sort(key=lambda x: x[1])
>>> xs
[[1.346646, '2020/07/21'], [1.345646, '2020/07/21'], [1.33315, '2020/07/22'], [1.345646, '2020/07/22'], [1.33315, '2020/07/25'], [1.345646, '2020/07/25'], [1.33315, '2020/07/27']]