Atributting values to specific numbers trough a file

Question:

My question is if there’s any way to attribute the numbers in the first column to the ones in the second column. So that I can read the numbers in the second column but have them connected to the ones in the first column in some way, so that I can sort them as I do in the sorted_resistances list but after sorting them I replace them with the values in the first column that we’re assigned to each of the values.
For information in the code it’s opening up from a file the list that’s why it’s programed like that

1 30000
2 30511
3 30052
4 30033
5 30077
6 30055
7 30086
8 30044
9 30088
10 30019
11 30310
12 30121
13 30132


with open("file.txt") as file_in:

    list_of_resistances = []
    for line in file_in:
        list_of_resistances.append(int(line.split()[1]))
        sorted_resistances = sorted(list_of_resistances)
Asked By: Joao

||

Answers:

If you want to keep the correlation between the values in the two columns, you can keep all of the values from each line in a tuple (or list), and then sort the list of tuples using a specific piece by passing a lambda function to the key parameter of the sorted() function that tells it to use the second piece of each tuple as the sort value.

In this example, I used pprint.pprint to make the output the of the lists easier to read.

from pprint import pprint

with open("file.txt") as file_in:

    list_of_resistances = []
    for line in file_in:
        list_of_resistances.append(tuple(line.strip().split(' ')))
    
    print("Unsorted values:")
    pprint(list_of_resistances)
    
    sorted_resistances = sorted(list_of_resistances, key=lambda x: x[1])
    print("nSorted values:")
    pprint(sorted_resistances)

    print("nSorted keys from column 1:")
    pprint([x[0] for x in sorted_resistances])

Output:

Unsorted values:
[('1', '30000'),
 ('2', '30511'),
 ('3', '30052'),
 ('4', '30033'),
 ('5', '30077'),
 ('6', '30055'),
 ('7', '30086'),
 ('8', '30044'),
 ('9', '30088'),
 ('10', '30019'),
 ('11', '30310'),
 ('12', '30121'),
 ('13', '30132')]

Sorted values:
[('1', '30000'),
 ('10', '30019'),
 ('4', '30033'),
 ('8', '30044'),
 ('3', '30052'),
 ('6', '30055'),
 ('5', '30077'),
 ('7', '30086'),
 ('9', '30088'),
 ('12', '30121'),
 ('13', '30132'),
 ('11', '30310'),
 ('2', '30511')]

Sorted keys from column 1:
['1', '10', '4', '8', '3', '6', '5', '7', '9', '12', '13', '11', '2']
Answered By: nigh_anxiety
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.