假设我有一个2D列表:
data = []
data.append([7, 12, 19, 'Type1', 'New'])
data.append([1, 2, 21, 'Type3', 'New'])
data.append([12, 7, 22, 'Type2', 'Active'])
data.append([3, 0, 22, 'Type3', 'Active'])
data.append([0, 1, 18, 'Type2', 'Closed'])
data.append([13, 11, 19, 'Type1', 'Closed'])
我想按第四列和第五列对2d列表进行排序。我希望第4列按升序排列,但第5列按“新建”,“活动”,“关闭”的顺序排列。
所需的2d列表:
[7, 12, 19, 'Type1', 'New'])
[13, 11, 19, 'Type1', 'Closed'])
[12, 7, 22, 'Type2', 'Active'])
[0, 1, 18, 'Type2', 'Closed'])
[1, 2, 21, 'Type3', 'New'])
[3, 0, 22, 'Type3', 'Active'])
这行让我接近,但不太清楚:
sortedData = sorted(data, key=lambda x:(x[3],x[4]))
关于按两个字段排序的任何建议?
答案 0 :(得分:2)
您可以构造字典优先级映射,然后使用tuple
排序键:
priorities = {v: k for k, v in enumerate(['New', 'Active', 'Closed'])}
res = sorted(data, key=lambda x: (x[3], priorities[x[4]]))
print(res)
[[7, 12, 19, 'Type1', 'New'],
[13, 11, 19, 'Type1', 'Closed'],
[12, 7, 22, 'Type2', 'Active'],
[0, 1, 18, 'Type2', 'Closed'],
[1, 2, 21, 'Type3', 'New'],
[3, 0, 22, 'Type3', 'Active']]