'Passing string for variable name Python

I am writing a program that can take in three numbers and three letters on seperate lines. The program will then seperate the numbers into items of a list and will do the same for the letters in a separate list. The program will then sort the the numbers from lowest to highest. I then want to assign the numbers to letters (In a sorted letter order (I.E. A=5, B=16, C=20) and then print the letters in the order it came in from the input (I.E. Input: CAB, output: 20 5 16). I have been able to sort the variables and can do all of this with if statements and for loops but I feel like there is a prettier and more efficient way of doing this. I want to be able to take the input letter string that's divided by use of a list and format the string to insert the variables in the correct order. I know that the globals() and locals() functions do something similar to this but can not figure out how to use them. Any ideas?

Working code:

nput_numbers_list = ((input()).split(" "))
input_letters = (input())
input_letters_list = []
for i in range(3):
    input_letters_list.append(input_letters[i])
input_numbers_list = [int(x) for x in input_numbers_list]
input_numbers_list.sort()
print_string = ""
for i in range(3):
    if input_letters[i] == "A":
        print_string = print_string + A + " "
    if input_letters[i] == "B":
        print_string = print_string + B + " "
    if input_letters[i] == "C":
        print_string = print_string + C + " "
print(print_string)

My (wanted) code:

input_numbers_list = ((input()).split(" "))
input_letters = (input())
input_letters_list = []
for i in range(3):
    input_letters_list.append(input_letters[i])
input_numbers_list = [int(x) for x in input_numbers_list]
input_numbers_list.sort()
A = str(input_numbers_list[0])
B = str(input_numbers_list[1])
C = str(input_numbers_list[2])
final_list = ["""Magic that turns input_letters_list into variables in the order used by list and then uses that order"""]
print("{} {} {}".format("""Magic that turns final_list into variables in the order used by list and then puts it in string""") 

Wanted/expected input and output:

Input: "5 20 16"
Input: "CAB"
Output: "20 5 16"


Solution 1:[1]

Its very weird the case when you need to conver string to a variable, when you feel that you need something like that a dictionary will probably do the trick.

in this case the solution can be done with the following code.

input_numbers_list = (("5 20 16").split(" "))
input_letters = ("CAB")

input_letters_list = [letter for letter in input_letters]
input_numbers_list = [int(x) for x in input_numbers_list]

rules = {}
for letter, value in zip(input_letters_list, input_numbers_list):
    rules[value] = letter

output = ""
input_numbers_list.sort()
for numb in input_numbers_list:
    output += rules[numb] + " "
print(output)

And you can use it for n inputs and outputs.

The idea of a dictionary is that you have keys, and values, so for a key (in this case text of letters) you can get a value, similar to a variable. Plus is super fast.

Solution 2:[2]

You could use a dictionary for that! https://www.w3schools.com/python/python_dictionaries.asp

EDIT: the output is more consistent with the requested one, but it should be "20 16 5" instead of "20 5 16" if I understood your problem well.

input_numbers_list = input().split(" ")
input_letters = input()
# Create new dictionary
input_dict = {}
# Fill it by "merging" both lists
for index, letter in enumerate(input_letters):
    input_dict[letter] = input_numbers_list[index]
# Sort it by converting it into a list and riconverting to dict
sorted_dict = {k: v for k, v in sorted(list(input_dict.items()))}
# Print the result
output = ''
for value in sorted_dict.values():
    output += value + ' '
print(output)

Solution 3:[3]

Using zip function helps

num_arr = list(map(int,input().split(' ')))
word = input()
num_arr.sort()
word = sorted(word)
mapper = dict(zip(word,num_arr))
result = ' '.join(map(str,[mapper[i] for i in word]))
print(result)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 TOMAS CORTES DE LA FUENTE
Solution 2
Solution 3 Midhilesh Momidi