Как динамически сохранять значение кортежа в переменную в Python?

#python #python-3.x #list #tuples

#python #python-3.x #Список #Кортежи

Вопрос:

Мне нужно динамически сохранять список кортежей в строковую переменную. Не могли бы вы мне помочь?

Пример:

 lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]
  

Желаемый результат:

 input_v1 = ('kol_id', '101152')
input_v2 = ('jnj_id', '7124166')
input_v3 = ('thrc_nm', 'VIR')
  

Комментарии:

1. Что еще, кроме input_v1 = lst[0] и т.д. вы ожидаете? Создание имен переменных во время выполнения?

2. Пожалуйста, обновите свой вопрос кодом, который вы пробовали.

Ответ №1:

Вдохновленный идеей @ baduker, опробованной с использованием exec()

 >>> lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]
>>> for i,val in enumerate(lst):
...     exec('input_v{} = {}'.format(i 1,val))
>>> input_v1
('kol_id', '101152')
>>> input_v2
('jnj_id', '7124166')
>>> input_v3
('thrc_nm', 'VIR')
  

exec() выполнит для вас все, что передано в строке.

Ответ №2:

Вы можете просто сохранить его в словаре.

 lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]

d = {}

for i, element in enumerate(lst, 1):
    d[f'input_v{i}'] = element
  

итак d ,:

 {'input_v1': ('kol_id', '101152'), 'input_v2': ('jnj_id', '7124166'), 'input_v3': ('thrc_nm', 'VIR')}
  

Ответ №3:

Попробуйте это:

 lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]
def get_values(l):
    for idx, item in enumerate(l, start=1):
        yield f"input_v{idx} = {item}"
    
for _input in get_values(lst):
    print(_input)
  

Это выводит:

 input_v1 = ('kol_id', '101152')
input_v2 = ('jnj_id', '7124166')
input_v3 = ('thrc_nm', 'VIR')
  

Комментарии:

1. Я не понизил голос, но это просто создает строковые представления переменных? Если кто-то захочет использовать значения, ему придется проанализировать строку, чтобы получить значение…

2. Ну, разве это не желаемый результат, который хотел OP?

Ответ №4:

Я не рекомендую сохранять ваш список кортежей в нескольких переменных.

Было бы более масштабируемым поместить ваши кортежи в одну структуру данных, например, словарь:

 >>> lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]
>>> dic = {f"input_v{index}": tup for index, tup, in enumerate(lst, start=1)}
>>> dic
{'input_v1': ('kol_id', '101152'), 'input_v2': ('jnj_id', '7124166'), 'input_v3': ('thrc_nm', 'VIR')}
>>> dic['input_v1']
('kol_id', '101152')
>>> dic['input_v2']
('jnj_id', '7124166')
>>> dic['input_v3']
('thrc_nm', 'VIR')
  

Ответ №5:

Если бы я понял вопрос

 lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]

for i, val in enumerate(lst):
    globals()[f'input_v{i   1}'] = val # using f-string, python 3.6 

>>> input_v1
('kol_id', '101152')
>>> input_v2
('jnj_id', '7124166')
>>> input_v3
('thrc_nm', 'VIR')
  

Но я думаю, что что-то не так. Я предпочитаю dict.