2013-07-12 121 views
2

我有一个对象列表,我想基于并行数组对它们进行排序。所以,当我操作数据列表时,我构建了一个并行数组(其中,列表中的每个条目都对应于原始列表中的条目)。然后(让我们说的并行阵列写满数字)基于并行数组的python排序

list_a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 
list_b = (4, 2, 5, 6, 1, 7, 3, 9, 0, 8) 

我想排序基于并行数组值对象的原始列表,以便原始列表以升序由数值排序其他阵列。有没有办法做到这一点内置到Python?

sort_a_by_b(list_a, list_b) 

预期的结果将是:

list_a_sorted_by_b = (8, 4, 1, 6, 0, 2, 3, 5, 9, 7) 
+0

顺便说一句,你有什么有元组,而不是列表或数组。 – geoffspear

回答

6
>>> list_a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> list_b = [4, 2, 5, 6, 1, 7, 3, 9, 0, 8] 
>>> 
>>> import operator 
>>> 
>>> [k for k, v in sorted(zip(list_a, list_b), key=operator.itemgetter(1))] 
[8, 4, 1, 6, 0, 2, 3, 5, 9, 7] 
+0

谢谢你的帮助。 – avorum

1

通话对象列表objects和其他列表sort_keys。如果您只能从objects[i]的值计算sort_keys[i],则甚至不需要构建sort_keys。您应该只是这样做:

objects.sort(key=compute_sort_key_for_object) 

其中compute_sort_key_for_object是你用来计算sort_keys[i]objects[i]功能。它更快,更具可读性。

如果处理计算sort_keys比较复杂,你要罗希特的回答是:

import operator 
[k for k, v in sorted(zip(objects, sort_keys), key=operator.itemgetter(1))]