user1805048
user1805048

Reputation: 63

How to write a function to rearrange a list according to the dictionary of index

How to write a function to rearrange a list according to the dictionary of index in python?

for example,

    L=[('b',3),('a',2),('c',1)]

    dict_index={'a':0,'b':1,'c':2}

I want a list of :

   [2,3,1]

where 2 is from 'a',3 is from 'b' and 1 is from 'c', but rearrange only the number in L according to the dict_index

Upvotes: 1

Views: 450

Answers (3)

PeterBB
PeterBB

Reputation: 343

Using list comprehensions:

def index_sort(L, dict_index):
    res = [(dict_index[i], j) for (i, j) in L]     #Substitute in the index
    res = sorted(res, key=lambda entry: entry[0])  #Sort by index
    res = [j for (i, j) in res]                    #Just take the value

    return res

Upvotes: 1

DSM
DSM

Reputation: 353079

sorted and the .sort() method of lists take a key parameter:

>>> L=[('b',3),('a',2),('c',1)]
>>> dict_index={'a':0,'b':1,'c':2}
>>> sorted(L, key=lambda x: dict_index[x[0]])
[('a', 2), ('b', 3), ('c', 1)]

and so

>>> [x[1] for x in sorted(L, key=lambda x: dict_index[x[0]])]
[2, 3, 1]

should do it. For a more interesting example -- yours happens to match alphabetical order with the numerical order, so it's hard to see that it's really working -- we can shuffle dict_index a bit:

>>> dict_index={'a':0,'b':2,'c':1}
>>> sorted(L, key=lambda x: dict_index[x[0]])
[('a', 2), ('c', 1), ('b', 3)]

Upvotes: 1

BoppreH
BoppreH

Reputation: 10173

Try this (edited with simpler solution):

L=[('b',3),('a',2),('c',1)]

dict_index={'a':0,'b':1,'c':2}

# Creates a new empty list with a "slot" for each letter.
result_list = [0] * len(dict_index)

for letter, value in L:
    # Assigns the value on the correct slot based on the letter.
    result_list[dict_index[letter]] = value

print result_list # prints [2, 3, 1]

Upvotes: 1

Related Questions