2010-04-01 97 views
1

我有3个表,每个相等的元素:电子邮件地址,工资和ID如何按字母顺序排序列表,并在同一顺序进行排序额外列出

我想的电子邮件地址和按字母顺序排序以某种方式对其他2个列表(工资和ID)进行排序。

E.g., 
Emails: 
[email protected] 
[email protected] 

Salaries: 
50000 
60000 

IDs: 
2 
1 

拼图: 我想的电子邮件进行排序,从而[email protected]是第一和[email protected]是最后的薪金是60000,然后50000和ID是1,那么2

附加详细信息:
1.列表长度相同,可以比两个元素长。
2.我将随后将ID传递给函数以检索更多列表。那些列表将不需要排序,因为它们将采用 ID列表的顺序。

+1

你真正的问题是在上游。您应该使用更紧密地绑定电子邮件地址工资和ID的数据结构(元组,命名元组,对象)。 – 2010-04-01 22:09:39

回答

0

假设每个电子邮件ID是唯一的,那么这将工作:

sortedEmails = emails[:] 
sortedEmails.sort() 

sortedSalaries = [] 
for email in sortedEmails: 
    i = emails.index(email) 
    sortedSalaries.append(salaries[i]) 

希望帮助

+0

-1 O(N ** 2)因为list.index是O(N) – 2010-04-01 22:11:13

3

这实质上是EBO的解决方案,在一个由-liner与sorted()而不是list.sort的用户以及分配中的多个左值来获取单个列表(以原始名称命名,但前缀为s_)dir ectly。

>>> email = ['[email protected]', '[email protected]'] 
>>> salaries = [50000, 60000] 
>>> ids = [2,1] 

>>> s_email, s_salaries, s_ids = zip(*sorted(zip(email, salaries, ids))) 

>>> s_email 
('[email protected]', '[email protected]') 
>>> s_salaries 
(60000, 50000) 
>>> s_ids 
(1, 2) 
>>> 
+0

非常适合保持列表分离。 – KronoS 2011-08-03 17:58:40