开发者

How to sort a list alphabetically and have additional lists sorted in the same order

开发者 https://www.devze.com 2022-12-25 03:47 出处:网络
I have 3 lists, each with equal elements: email addresses, salaries and IDs I\'d like to sort the email addresses alphabetically and in some way sort the other 2 lists (salaries and IDs).

I have 3 lists, each with equal elements: email addresses, salaries and IDs

I'd like to sort the email addresses alphabetically and in some way sort the other 2 lists (salaries and IDs).

E.g.,
Emails:
z@company.com
a@company.com

Salaries:
50000
60000

IDs:
2
1

The puzzle: I'd like to sort Emails such that a@c.com is first and z@c.com is last and Salaries is 60000 then 50000 and IDs is 1 then 2.

Additional detail:

1. Length of lists are the same and can be longer than two elements.

2. I will subsequently pass IDs to functions to retrieve further lists. Those lists won't need sortin开发者_C百科g as they will adopt the order of the IDs list.


Try:

emails = ["z@c.com", "a@c.com"]
salaries = [50, 60]
ids = [2, 1]

intermediate = zip(emails, salaries, ids)
intermediate.sort()

result = zip(*intermediate)


This is essentially ebo's solution, made to a one-liner with the user of sorted() rather than list.sort, and multiple lvalues in the assignement to get the individual list (named as the original but with an s_ prefix) directly.

>>> email = ['z@company.com', 'a@company.com']
>>> salaries = [50000, 60000]
>>> ids = [2,1]

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

>>> s_email
('a@company.com', 'z@company.com')
>>> s_salaries
(60000, 50000)
>>> s_ids
(1, 2)
>>>


Assuming that each email ID is unique, then this will work:

sortedEmails = emails[:]
sortedEmails.sort()

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

Hope that helps

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号