如何使用两个属性值在Python中对列表进行排序?

时间:2016-03-16 10:48:53

标签: python-3.x

假设我有一个名为L的列表和两个名为arr1arr2的属性词典,其键是列表L的元素。现在我想以下列方式对L进行排序。

  1. L应根据arr1中的属性值按升序排序。
  2. 如果i的两个元素jL具有相同的属性arr1,则i,e,如果arr1[i]arr[j]相等,然后我们应该在arr2
  3. 中查找属性值

    举个例子,假设

    L=[0,1,2,3,4,5,6]
    arr1={0:30,1:15,2:15,3:20,4:23,5:20,6:35}
    arr2={0:6,1:8,2:6,3:17,4:65,5:65,6:34}
    

    排序L应为[2,1,3,5,4,0,6],排序介于1和2之间由arr2决定,排序介于3和5之间。排序的其余部分由{{1 }}

1 个答案:

答案 0 :(得分:1)

只需使用包含arr1arr2值的元组作为排序键:

L.sort(key=lambda x: (arr1[x], arr2[x]))
# [2, 1, 3, 5, 4, 0, 6]

这与5和3的排序中的预期结果不同,如果基于arr2的排序顺序降序,这将是一致的:

L.sort(key=lambda x: (arr1[x], -arr2[x]))
# [1, 2, 5, 3, 4, 0, 6]

但是现在1,2的排序不同,你的例子似乎没有以一致的方式排序。