问题描述
我有一个[[['foo','$total',400],['foo','sauce',300],'bacon',100]],[['bar','bro',200],['bar',-200],'sup',-400]]]
列表
我想应用排序列表理解,以使“ $ total”在列表中排在第一位,其余列表按列表中的第三项进行排序。
输出示例:[[['foo',-400]]]
在此,“ $ total”在所有子列表中排在第一位,其余列表则在倒数第二/三位倒排。
我尝试了一下,但是没有用:
for index,ele in enumerate(final_res):
final_res[index] = list(sorted(final_res[index],key=lambda x: [ x[1] if x[1] == "total" else x[2] ],reverse=True))
请让我知道通过列表理解排序实现这一目标的最佳方法。
解决方法
使用自定义功能
例如:
data = [[['foo','$total',400],['foo','sauce',300],'bacon',100]],[['bar','bro',200],['bar',-200],'sup',-400]]]
for i in data:
i.sort(key=lambda x: (x[1] == '$total',x[2]),reverse=True)
print(data)
#OR data = [sorted(i,key=lambda x: (x[1] == '$total',reverse=True) for i in data]
输出:
[[['foo',-400]]]